• Nenhum resultado encontrado

Concepção e Fabrico Assistido por Computador

N/A
N/A
Protected

Academic year: 2021

Share "Concepção e Fabrico Assistido por Computador"

Copied!
24
0
0

Texto

(1)

Trabalho de programação

Visual Basic for Applications

Desenho Automático de Cilindro Hidráulico

MSAccess ÍÎ VBA ÍÎ AutoCAD

Trabalho desenvolvido por:

Mário Jorge Pereira Estima de Oliveira_4º ano LGEI

(2)

Índice

Objectivo ………...

2

Introdução ………...

2

Instalação ………...

3

Aplicação – Programação

………...

4

Interface

principal

………...

4

Dimensões

gerais

………...

5

Extremidade da haste

………...

6

Carregamento da interface

………...

7

Detecção de erros de entrada de dados ………...

8

Desenho das vistas

………...

9

Vista de frente

………...

10

Vista de cima

………...

14

Vista

lateral

………...

19

Final – desenho das vistas

………...

22

Agradecimento ………...

23

(3)

Objectivo

Este trabalho tem como objectivo o desenvolvimento de uma aplicação a ser

executada no ambiente AutoCAD. Neste sentido, a aplicação criada deverá receber dados

apropriados por parte do utilizador de forma a ser capaz de representar de modo

automático as três vistas bidimensionais de um cilindro hidráulico normalizado.

Pretende-se o recurso à linguagem de programação por objectos Visual Basic for

Applications (VBA).

Introdução

O objecto cujo desenho se pretende automatizar consiste num cilindro hidráulico

normalizado de 220 bars, em especial o que consta da série apresentada no catálogo da

empresa Vega sob a designação V220 CBL, catálogo existente na secção de Desenho

Industrial do DEMEGI. O enunciado proposto é, então, a automatização do seguinte

exemplo:

(4)

Como parâmetros de entrada, o utilizador deverá fornecer os valores correspondentes ao

diâmetro interno e ao curso do cilindro, variáveis independentes neste âmbito. Deverá

também indicar um de dois tipos de extremidade possíveis para a haste. As relações entre

os parâmetros de entrada e restantes, cujo valor é atribuído em função do diâmetro

interno, estão definidas em tabelas existentes no catálogo de base a este trabalho.

Estas tabelas foram convertidas para o formato do sistema de gestão de bases de

dados Microsoft Access, por motivos de facilidade de acesso e igualmente privilegiando o

entrosamento com a tecnologia a usar – Microsoft Visual Basic for Applications. Assim,

existe uma interligação MSAccess<->VBA<->AutoCAD proposta por esta aplicação.

Instalação

Para o correcto funcionamento da aplicação desenvolvida existem certos passos a

seguir, como aqui é indicado.

O acesso à base de dados MSAccess é feito através da tecnologia ActiveX Data

Objects (ADO), definindo-se igualmente um Data Source Name (DNS) à ligação, de

forma a facilitar a mesma e torná-la mais transparente ao utilizador/programador. Assim,

no Painel de Controlo do Windows, deve escolher-se Ferramentas Administrativas, após

o que se selecciona “Origens de Dados (ODBC)”; selecciona-se a opção “DNS de

sistema” e faz-se “adicionar”. Seguidamente, selecciona-se o driver Microsoft Access

driver (*.mdb), fazendo depois “Terminar”. Posteriormente, edita-se o nome (o nome

usado na aplicação entregue é “trabcfac_meu”) e descrição a fornecer à ligação e

indica-se o caminho para a baindica-se de dados MSAccess, através do botão Select.

Já no editor de Visual Basic, em Tools->References, devem acrescentar-se as

bibliotecas Microsoft ActiveX Data Objects 2.7 Library e Microsoft ActiveX Data Objects

Recordset 2.8 Library.

Nota: Este procedimento só deve ser efectuado uma vez em cada computador onde se

pretende correr a aplicação deste trabalho.

No âmbito da utilização da aplicação no AutoCAD propriamente dito, deve carregar-

-se a mesma no seu ambiente. Existe mais do que uma alternativa, de que se destacam a

execução do comando vbaload ou o recurso ao atalho Tools->Macro->Load Project…,

seguidos da escolha do ficheiro Project.dvb, ficheiro que contém a informação em Visual

Basic desta aplicação. Para a sua execução, deve fazer-se Alt+F11 seguido de F5 ou usar

o atalho Run no editor de VBA.

Por fim, para uma correcta manipulação das layers por parte do Visual Basic e do

AutoCAD, sugere-se a criação de layers correspondentes à criação de elementos

desenhados a traço interrompido e a traço grosso, assumindo as designações de ti e tg,

respectivamente. Sugere-se, no entanto, o uso do template a4x.dwt entregue em anexo a

este trabalho, para facilitar este processo.

(5)

Aplicação - Programação

Nesta secção de apresentação da aplicação desenvolvida, referem-se brevemente os

elementos de sintaxe da linguagem VBA a que se recorreu para a sua aplicação. Far-se-á

uma pequena explicação sempre que relevante acerca dos procedimentos utilizados.

Interface principal

Da aplicação consta uma única interface principal, da qual se apresenta de seguida

uma imagem:

(6)

Dimensões gerais

Como se pode observar, e de acordo com o que tinha sido já referido, o utilizador tem

a possibilidade de escolher entre os valores normalizados para o diâmetro interno e para o

curso do cilindro.

Fig. 3 – Pormenor da interface principal relativo ao diâmetro interno e ao curso.

Tal como se observa na Fig. 3, de acordo com a escolha relativa ao diâmetro interno,

as caixas de texto situadas na zona inferior da mesma são actualizadas concordante e

dinamicamente, através de uma chamada à base de dados e tabelas respectivas. Esta

acção é executada através do seguinte procedimento:

Private Sub Combo_diametro_Change() Set conn = New ADODB.Connection conn.Open "trabcfac_meu", ""

Set rs_diametro = conn.Execute("SELECT * FROM dim_gerais where diametro=" & Combo_diametro.Value) diametro_haste.Value = rs_diametro("diametro_haste") FJ.Value = rs_diametro("FJ") G.Value = rs_diametro("G") H.Value = rs_diametro("H") L.Value = rs_diametro("L") N.Value = rs_diametro("N") XA.Value = rs_diametro("XA") XB.Value = rs_diametro("XB") Q.Value = rs_diametro("Q") R.Value = rs_diametro("R") ST.Value = rs_diametro("ST") WH.Value = rs_diametro("WH") conn.Close End Sub

A instrução X.Value

1

faz referência ao valor presente nas caixas de texto, actualizadas

neste caso com o valor das variáveis dependentes.

As duas linhas seguintes

1

(7)

Set conn = New ADODB.Connection conn.Open "trabcfac_meu", ""

correspondem à ligação à base de dados MSAccess criada no computador onde o trabalho

foi desenvolvido, sendo que a instrução

Set rs_diametro = conn.Execute("SELECT * FROM dim_gerais where diametro=" & Combo_diametro.Value)

corresponde a uma operação de selecção sobre a base de dados, na linguagem SQL,

guardando o resultado obtido na variável

rs_diametro

.

conn.Close

fecha a ligação à base de dados.

Extremidade da haste

Adicionalmente, o utilizador deverá escolher entre duas extremidades para a haste:

rosca macho ou, em alternativa, rosca fêmea.

Fig. 4 – Pormenor da interface principal relativo à extremidade da haste.

Não é perceptível através de uma imagem individual, mas por comparação com a

Fig.2 da interface principal global, consegue-se perceber que de acordo com a escolha do

tipo de haste na caixa de selecção, a vista respectiva é actualizada dinamicamente na

própria interface, através da inserção de uma imagem. Isso é conseguido através da

seguinte subrotina:

Private Sub Combo_tipo_haste_Change()

Select Case Combo_tipo_haste.Value

Case 0

Image_haste.Visible = True

Image_haste.Picture = LoadPicture("macho_res.jpg")

Case 1

Image_haste.Visible = True

Image_haste.Picture = LoadPicture("femea_res.jpg")

(8)

End Select

End Sub

Nesta subrotina optou-se pelo recurso à estrutura de selecção Select Case.

Carregamento da interface

É importante e oportuno referir que a activação/carregamento da Form em si, ou seja,

o acto de lançamento da aplicação possui algumas acções associadas, definidas através da

seguinte subrotina que é chamada, em primeira instância, pela linha que se segue:

Private Sub UserForm_Activate() Call ler_dimensoes

End Sub

Private Sub ler_dimensoes()

Combo_diametro.SetFocus

Set conn = New ADODB.Connection conn.Open "trabcfac_meu", ""

Set rs_diametro = conn.Execute("SELECT diametro FROM dim_gerais")

rs_diametro.MoveFirst While Not rs_diametro.EOF Combo_diametro.AddItem rs_diametro("diametro") rs_diametro.MoveNext Wend rs_diametro.Close

'Set rs_diametro = Nothing

Set rs_diametro = conn.Execute("SELECT * FROM dim_curso") rs_diametro.MoveFirst

While Not rs_diametro.EOF Combo_curso.AddItem rs_diametro("curso") rs_diametro.MoveNext Wend

Combo_tipo_haste.AddItem "Rosca Macho", 0 Combo_tipo_haste.AddItem "Rosca Fêmea", 1

conn.Close

(9)

End Sub

Ou seja, a rotina ler_dimensões desempenha um papel importante: lê a base de dados

quanto às dimensões possíveis do diâmetro interno e do curso do cilindro, transferindo-as

para a caixa de selecção respectiva da interface gráfica, e atribui como possibilidades

para a extremidade da haste os itens "Rosca Macho" e "Rosca Fêmea", aos quais atribui

valores para que posteriormente se possa identificar a escolha. X.AddItem adiciona, pois,

um valor a uma caixa de selecção.

De referir também que esta rotina posiciona o cursor na caixa de selecção do diâmetro

interno do cilindro e que a ordem de tabulação está também devidamente organizada.

Uma breve referência ao evento associado ao botão Fechar da interface principal para

apresentar o código abaixo transcrito

Private Sub fechar_Click() End

End Sub

o que corresponde, simplesmente, ao fecho da aplicação (End) sem qualquer acção

previamente executada, como pretendido, nesse caso, pelo utilizador.

Detecção de erros de entrada de dados

O utilizador tem a possibilidade de desenhar uma das três vistas em separado: frente,

cima e lateral. No entanto, caso não forneça todos os dados necessários à aplicação, surge

uma mensagem adequada informando sobre os dados em falta. Apresenta-se um

exemplo:

Fig. 5 – Exemplo de mensagem de erro (omissão) de entrada de dados por parte do utilizador.

Mensagens idênticas surgirão para omissões do valor do diâmetro interno e/ou do

curso do cilindro.

(10)

O código correspondente a este filtro de erros está inserido na subrotina de desenho de

cada uma das vistas e é:

Dim mensagem As String mensagem = ""

'testes à existência de erros na introdução dos dados (omissões) If Combo_diametro.Value = "" Then

mensagem = mensagem + "Deve seleccionar o valor correspondente ao diâmetro" + vbCr End If

If Combo_curso.Value = "" Then

mensagem = mensagem + "Deve seleccionar o valor correspondente ao curso" + vbCr End If

If Combo_tipo_haste.TextLength = 0 Then

mensagem = mensagem + "Deve seleccionar o tipo de haste a utilizar" End If

If mensagem <> "" Then MsgBox mensagem Else

A esta última instrução segue-se o desenho da vista pedida, caso não existam dados em

falta. A variável

vbC do VBA provoca a mudança de linha num texto.

Desenho das vistas

Após a escolha de uma dada vista a desenhar, caso não existam omissões de dados, é

solicitado ao utilizador que seleccione o ponto de inserção da vista

Fig. 6 – Pedido de selecção do ponto de inserção da vista a desenhar.

através do método GetPoint:

UserForm1.Hide

MsgBox ("seleccione o ponto de inserção da vista de frente") p1 = ThisDrawing.Utility.GetPoint(, "")

Para este propósito, o ponto incial - p1- teve de ser definido como acad_point (Dim p1 As

ACAD_POINT) ao invés dos restantes definidos como arrays (Dim pt(2) as Double).

A linha

UserForm1.Hide

permite ocultar a caixa de diálogo de forma ao utilizador

poder escolher o ponto pretendido no AutoCAD.

(11)

Vista de frente

O código referente à vista de frente é algo extenso, apresentando-se de seguida

acompanhado de comentários apropriados, sempre que relevante:

'---VISTA DE FRENTE - início---

Dim layer_tg As AcadLayer Dim layer_ti As AcadLayer

Set layer_tg = ThisDrawing.Layers.Add("tg") Set layer_ti = ThisDrawing.Layers.Add("ti") ThisDrawing.ActiveLayer = layer_tg

‘tornou-se a layer “tg” (traço grosso) activa para o desenho; esta é, portanto, a layer activa por ‘defeito e só será abandonada para casos pontuais de desenho a traço interrompido.

Set conn = New ADODB.Connection conn.Open "trabcfac_meu", ""

Set rs_diametro = conn.Execute("SELECT I FROM dim_gerais where diametro=" & Combo_diametro.Value)

I = rs_diametro("I") conn.Close

p2(0) = p1(0) + I: p2(1) = p1(1)

p3(0) = p1(0) + (Val(FJ.Value) + Val(Combo_curso.Value)) / 2 - Val(Q.Value) / 2: p3(1) = p1(1) p4(0) = p3(0): p4(1) = p3(1) + Val(R.Value) p5(0) = p4(0) + Val(Q.Value): p5(1) = p4(1) p6(0) = p5(0): p6(1) = p5(1) - Val(R.Value) p8(0) = p6(0) + p3(0) - p1(0): p8(1) = p6(1) p7(0) = p8(0) - I: p7(1) = p8(1) p9(0) = p8(0): p9(1) = p8(1) + 2 * Val(H.Value) p10(0) = p9(0) - I: p10(1) = p9(1) p12(0) = p9(0) - (Val(FJ.Value) + Val(Combo_curso.Value)): p12(1) = p9(1) p11(0) = p12(0) + I: p11(1) = p12(1)

'a função Val() permite converter uma variável num valor numérico, como é necessário ao ‘recorrer a elementos contidos em caixas de texto

espaco.AddLine p1, p3 espaco.AddLine p3, p4 espaco.AddLine p4, p5 espaco.AddLine p5, p6

p3(0) = p1(0) + (Val(FJ.Value) + Val(Combo_curso.Value)) / 2: p3(1) = p1(1) - Val(R.Value) / 2 p4(0) = p3(0): p4(1) = p5(1) + Val(R.Value) / 2

ThisDrawing.ActiveLayer = layer_ti

‘primeira instância de mudança de layer para traço interrompido espaco.AddLine p3, p4 ThisDrawing.ActiveLayer = layer_tg espaco.AddLine p6, p8 espaco.AddLine p8, p9 espaco.AddLine p9, p12 espaco.AddLine p12, p1

(12)

‘o método AddLine permite desenhar uma linha em AutoCAD, tomando como argumentos os ‘pontos de início e de fim da linha

Set conn = New ADODB.Connection conn.Open "trabcfac_meu", ""

Set rs_diametro = conn.Execute("SELECT * FROM furos where diametro=" & Combo_diametro.Value)

raioi = rs_diametro("diametro_interior") / 2 raioe = rs_diametro("diametro_exterior") / 2

Set rs_diametro = conn.Execute("SELECT * FROM dim_gerais where diametro=" & Combo_diametro.Value)

B = rs_diametro("diametro_B") MM = rs_diametro("diametro_haste") conn.Close

centro1(0) = p1(0) + Val(L.Value): centro1(1) = p1(1) + Val(H.Value) + Val(G.Value) espaco.AddCircle centro1, raioi

espaco.AddArc centro1, raioe, 3.08, 1.6

centro2(0) = p8(0) - Val(L.Value): centro2(1) = p1(1) + Val(H.Value) + Val(G.Value) espaco.AddCircle centro2, raioi

espaco.AddArc centro2, raioe, 1.5, 6.4

‘o método AddArc desenha um arco e recebe como argumentos o ponto correspondente ao ‘centro do arco, o seu raio e o ângulo de início e de fim do arco, por esta ordem.

p13(0) = centro1(0) - raioe - 2: p13(1) = centro1(1) p14(0) = centro1(0) + raioe + 2: p14(1) = centro1(1) ThisDrawing.ActiveLayer = layer_ti

espaco.AddLine p13, p14

p13(0) = centro1(0): p13(1) = centro1(1) - raioe - 2 p14(0) = centro1(0): p14(1) = centro1(1) + raioe + 2 espaco.AddLine p13, p14

p13(0) = centro2(0) - raioe - 2: p13(1) = centro1(1) p14(0) = centro2(0) + raioe + 2: p14(1) = centro1(1) espaco.AddLine p13, p14

p13(0) = centro2(0): p13(1) = centro1(1) - raioe - 2 p14(0) = centro2(0): p14(1) = centro1(1) + raioe + 2 espaco.AddLine p13, p14 ThisDrawing.ActiveLayer = layer_tg p13(0) = p1(0): p13(1) = p1(1) + Val(H.Value) + B / 2 p14(0) = p1(0): p14(1) = p1(1) + Val(H.Value) - B / 2 p15(0) = p1(0) - 2: p15(1) = p13(1) p16(0) = p1(0) - 2: p16(1) = p14(1) espaco.AddLine p13, p15 espaco.AddLine p14, p16 espaco.AddLine p15, p16 espaco.AddLine p2, p11 espaco.AddLine p7, p10

'---Desenho da extremidade da haste - início--- Select Case Combo_tipo_haste.Value

Case 0

(13)

conn.Open "trabcfac_meu", ""

Set rs_diametro = conn.Execute("SELECT * FROM dim_haste where diametro=" & Combo_diametro.Value) MM = rs_diametro("diametro_haste") MM1 = rs_diametro("MM1") A1 = rs_diametro("A1") A = rs_diametro("A") KDi = rs_diametro("KDi") KDe = rs_diametro("KDe") 'P = rs_diametro("P") 'D = rs_diametro("D") conn.Close p17(0) = p16(0): p17(1) = p1(1) + Val(H.Value) - MM / 2 p18(0) = p17(0): p18(1) = p1(1) + Val(H.Value) + MM / 2 p19(0) = p18(0) - 2 / 15 * A1: p19(1) = p1(1) + Val(H.Value) + MM1 / 2 p20(0) = p18(0) - 2 / 15 * A1: p20(1) = p1(1) + Val(H.Value) - MM1 / 2 p22(0) = p19(0) - 3 / 4 * A1: p22(1) = p19(1) p21(0) = p22(0): p21(1) = p20(1) p23(0) = p22(0) - 0.2: p23(1) = p22(1) - 0.2 p24(0) = p23(0): p24(1) = p21(1) + 0.2 ex1(0) = p23(0): ex1(1) = p26(1) ex2(0) = p23(0): ex2(1) = p25(1)

p25(0) = p20(0) - A1: p25(1) = p1(1) + Val(H.Value) - KDe / 2 p26(0) = p25(0): p26(1) = p1(1) + Val(H.Value) + KDe / 2 ex1(0) = p23(0): ex1(1) = p26(1) ex2(0) = p23(0): ex2(1) = p25(1) p31(0) = p26(0) - (A - 0.2): p31(1) = p26(1) p32(0) = p26(0) - A: p32(1) = p31(1) - 0.2 p34(0) = p26(0) - (A - 0.2): p34(1) = p25(1) p33(0) = p26(0) - A: p33(1) = p34(1) + 0.2 diametro = ex1(0) - p26(0)

centro3(0) = (p26(0) + ex1(0)) / 2: centro3(1) = p26(1) espaco.AddArc centro3, diametro / 2, 3.14159254, 0 centro3(0) = (p25(0) + ex1(0)) / 2: centro3(1) = p25(1) espaco.AddArc centro3, diametro / 2, 0, 3.14159254 espaco.AddLine p18, p19 espaco.AddLine p17, p20 espaco.AddLine p19, p20 espaco.AddLine p19, p22 espaco.AddLine p20, p21 espaco.AddLine p21, p22 espaco.AddLine p21, p24 espaco.AddLine p22, p23 espaco.AddLine p23, p24 espaco.AddLine p25, p34 espaco.AddLine p34, p33 espaco.AddLine p33, p32 espaco.AddLine p32, p31 espaco.AddLine p31, p26 espaco.AddLine p31, p34 espaco.AddLine p26, p25 p30(0) = p31(0): p30(1) = p1(1) + Val(H.Value) + KDi / 2 p29(0) = p30(0): p29(1) = p1(1) + Val(H.Value) - KDi / 2 p28(0) = p26(0): p28(1) = p29(1)

(14)

p27(0) = p26(0): p27(1) = p30(1) espaco.AddLine p30, p27 espaco.AddLine p29, p28 Case 1

Set conn = New ADODB.Connection conn.Open "trabcfac_meu", ""

Set rs_diametro = conn.Execute("SELECT * FROM dim_haste where diametro=" & Combo_diametro.Value) D = rs_diametro("D") Ce = rs_diametro("Ce") Ci = rs_diametro("Ci") MM1 = rs_diametro("MM1") A1 = rs_diametro("A1") conn.Close p17(0) = p16(0): p17(1) = p1(1) + Val(H.Value) - MM / 2 p18(0) = p17(0): p18(1) = p1(1) + Val(H.Value) + MM / 2 nao_sei = 0.2 p19(0) = p18(0) - nao_sei: p19(1) = p1(1) + Val(H.Value) + MM1 / 2 nao_sei = 0.1 p24(0) = p19(0) - A1 + nao_sei: p24(1) = p19(1) p23(0) = p19(0) - A1: p23(1) = p24(1) - nao_sei p22(0) = p23(0): p22(1) = p24(1) - (MM1 - 2 * nao_sei) p21(0) = p24(0): p21(1) = p24(1) - MM1 p20(0) = p19(0): p20(1) = p19(1) - MM1 espaco.AddLine p17, p20 espaco.AddLine p18, p19 espaco.AddLine p19, p24 espaco.AddLine p24, p23 espaco.AddLine p23, p22 espaco.AddLine p22, p21 espaco.AddLine p21, p20 espaco.AddLine p19, p20 espaco.AddLine p24, p21 p13(0) = p24(0): p13(1) = p1(1) + Val(H.Value) + Ce / 2 p14(0) = p24(0): p14(1) = p1(1) + Val(H.Value) - Ce / 2 p15(0) = p13(0) + D: p15(1) = p13(1) p16(0) = p14(0) + D: p16(1) = p14(1) ThisDrawing.ActiveLayer = layer_ti p22(0) = p22(0) - 3: p22(1) = p1(1) + Val(H.Value) p18(0) = p8(0) + 3: p18(1) = p1(1) + Val(H.Value) espaco.AddLine p22, p18 espaco.AddLine p13, p15 espaco.AddLine p14, p16 p13(0) = p24(0): p13(1) = p1(1) + Val(H.Value) + Ce / 2 p14(0) = p24(0): p14(1) = p1(1) + Val(H.Value) - Ce / 2 p15(0) = p13(0) + D: p15(1) = p13(1) p16(0) = p14(0) + D: p16(1) = p14(1) espaco.AddLine p13, p15 espaco.AddLine p14, p16 p13(0) = p24(0): p13(1) = p1(1) + Val(H.Value) + Ci / 2 p14(0) = p24(0): p14(1) = p1(1) + Val(H.Value) - Ci / 2

(15)

p15(0) = p13(0) + D: p15(1) = p13(1) p16(0) = p14(0) + D: p16(1) = p14(1) espaco.AddLine p13, p15 espaco.AddLine p14, p16 espaco.AddLine p15, p16 p13(0) = p2(0) espaco.AddLine p13, p15 p14(0) = p2(0) espaco.AddLine p14, p16

p18(0) = p13(0) + (Ci / 2) * Tan(3.14159254 * 30 / 180): p18(1) = p1(1) + Val(H.Value) espaco.AddLine p13, p18

espaco.AddLine p18, p14 End Select

'---Desenho da extremidade da haste – fim---

'---VISTA DE FRENTE - fim---

Nota: O comando Set espaco = ThisDrawing.ModelSpace é sempre usado por motivos de

economia de espaço para a execução dos comandos que permitem desenhar no

AutoCAD.

Vista de cima

'---VISTA DE CIMA - início--- Dim layer_tg As AcadLayer

Dim layer_ti As AcadLayer

Set layer_tg = ThisDrawing.Layers.Add("tg") Set layer_ti = ThisDrawing.Layers.Add("ti") ThisDrawing.ActiveLayer = layer_tg UserForm1.Hide

MsgBox ("seleccione o ponto de inserção da vista de cima") p1 = ThisDrawing.Utility.GetPoint(, "")

'UserForm1.Show

Set conn = New ADODB.Connection conn.Open "trabcfac_meu", ""

Set rs_diametro = conn.Execute("SELECT * FROM dim_gerais where diametro=" & Combo_diametro.Value) I = rs_diametro("I") B = rs_diametro("diametro_B") conn.Close p2(0) = p1(0) + I: p2(1) = p1(1) p8(0) = p1(0) + Val(FJ.Value) + Val(Combo_curso.Value): p8(1) = p1(1) p7(0) = p8(0) - I: p7(1) = p8(1) p9(0) = p8(0): p9(1) = p8(1) + Val(XB.Value) + 2 * Val(ST.Value) p10(0) = p9(0) - I: p10(1) = p9(1) p12(0) = p9(0) - (Val(FJ.Value) + Val(Combo_curso.Value)): p12(1) = p9(1) p11(0) = p12(0) + I: p11(1) = p12(1)

(16)

espaco.AddLine p2, p11 espaco.AddLine p7, p10 espaco.AddLine p1, p8 espaco.AddLine p8, p9 espaco.AddLine p9, p12 espaco.AddLine p12, p1

p14(0) = p1(0)+(Val(FJ.Value)+ Val(Combo_curso.Value)) / 2 - Val(Q.Value) / 2: p14(1) = p1(1) p13(0) = p14(0): p13(1) = p14(1) + Val(XB.Value) + 2 * Val(ST.Value) p15(0) = p13(0) + Val(Q.Value): p15(1) = p13(1) p16(0) = p14(0) + Val(Q.Value): p16(1) = p14(1) ThisDrawing.ActiveLayer = layer_ti espaco.AddLine p13, p14 espaco.AddLine p15, p16 p13(0) = (p14(0) + p16(0)) / 2: p13(1) = p14(1) + Val(XB.Value) + 2 * Val(ST.Value) + 2 p14(0) = p13(0): p14(1) = p14(1) - 2 espaco.AddLine p13, p14 ThisDrawing.ActiveLayer = layer_tg

centro1(0) = p1(0) + (Val(FJ.Value) + Val(Combo_curso.Value)) / 2 - Val(XA.Value) / 2: centro1(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 - Val(XB.Value) / 2

centro2(0) = centro1(0) + Val(XA.Value): centro2(1) = centro1(1) centro3(0) = centro2(0): centro3(1) = centro2(1) + Val(XB.Value) centro4(0) = centro1(0): centro4(1) = centro3(1)

raio = 2 * Val(ST.Value) / 2

p13(0) = centro1(0) - raio - 2: p13(1) = centro1(1) p14(0) = centro1(0) + raio + 2: p14(1) = centro1(1) ThisDrawing.ActiveLayer = layer_ti

espaco.AddLine p13, p14

p13(0) = centro1(0): p13(1) = centro1(1) - raio - 2 p14(0) = centro1(0): p14(1) = centro1(1) + raio + 2 espaco.AddLine p13, p14

p13(0) = centro2(0): p13(1) = centro2(1) - raio - 2 p14(0) = centro2(0): p14(1) = centro2(1) + raio + 2 espaco.AddLine p13, p14

p13(0) = centro3(0): p13(1) = centro3(1) - raio - 2 p14(0) = centro3(0): p14(1) = centro3(1) + raio + 2 espaco.AddLine p13, p14

p13(0) = centro4(0): p13(1) = centro4(1) - raio - 2 p14(0) = centro4(0): p14(1) = centro4(1) + raio + 2 espaco.AddLine p13, p14

p13(0) = centro3(0) - raio - 2: p13(1) = centro3(1) p14(0) = centro3(0) + raio + 2: p14(1) = centro3(1) espaco.AddLine p13, p14

p13(0) = centro4(0) - raio - 2: p13(1) = centro4(1) p14(0) = centro4(0) + raio + 2: p14(1) = centro4(1) espaco.AddLine p13, p14

p13(0) = centro2(0) - raio - 2: p13(1) = centro2(1) p14(0) = centro2(0) + raio + 2: p14(1) = centro2(1) espaco.AddLine p13, p14

ThisDrawing.ActiveLayer = layer_tg

espaco.AddCircle centro1, Val(ST.Value) / 2 espaco.AddCircle centro2, Val(ST.Value) / 2 espaco.AddCircle centro3, Val(ST.Value) / 2 espaco.AddCircle centro4, Val(ST.Value) / 2 espaco.AddArc centro1, raio, 0, 3.141592655

(17)

espaco.AddArc centro2, raio, 0, 3.141592655 espaco.AddArc centro3, raio, 3.141592655, 0 espaco.AddArc centro4, raio, 3.141592655, 0 '[(XB+2*ST) - XB]=ST

p3(0) = centro1(0) - raio: p3(1) = centro1(1) p4(0) = p3(0): p4(1) = p3(1) - Val(ST.Value) espaco.AddLine p3, p4 p3(0) = p3(0) + 2 * raio p4(0) = p4(0) + 2 * raio espaco.AddLine p3, p4 p3(0) = centro2(0) - raio p4(0) = p3(0): p4(1) = p3(1) - Val(ST.Value) espaco.AddLine p3, p4 p3(0) = p3(0) + 2 * raio p4(0) = p4(0) + 2 * raio espaco.AddLine p3, p4

p3(0) = centro3(0) - raio: p3(1) = centro3(1) p4(0) = p3(0): p4(1) = p3(1) + Val(ST.Value) espaco.AddLine p3, p4 p3(0) = p3(0) + 2 * raio p4(0) = p4(0) + 2 * raio espaco.AddLine p3, p4 p3(0) = centro4(0) - raio p4(0) = p3(0): p4(1) = p3(1) + Val(ST.Value) espaco.AddLine p3, p4 p3(0) = p3(0) + 2 * raio p4(0) = p4(0) + 2 * raio espaco.AddLine p3, p4 p13(0) = p1(0): p13(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 + B / 2 p14(0) = p1(0): p14(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 - B / 2 p15(0) = p1(0) - 2: p15(1) = p13(1) p16(0) = p1(0) - 2: p16(1) = p14(1) espaco.AddLine p13, p15 espaco.AddLine p14, p16 espaco.AddLine p15, p16

'---Desenho da extremidade da haste - início--- Select Case Combo_tipo_haste.Value

Case 0

Set conn = New ADODB.Connection conn.Open "trabcfac_meu", ""

Set rs_diametro = conn.Execute("SELECT * FROM dim_haste where diametro=" & Combo_diametro.Value) MM = rs_diametro("diametro_haste") MM1 = rs_diametro("MM1") A1 = rs_diametro("A1") A = rs_diametro("A") KDi = rs_diametro("KDi") KDe = rs_diametro("KDe") conn.Close p17(0) = p16(0): p17(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 - MM / 2

(18)

p18(0) = p17(0): p18(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 + MM / 2

p19(0) = p18(0) - 2 / 15 * A1: p19(1)=p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 + MM1 / 2 p20(0) = p18(0) - 2 / 15 * A1: p20(1)=p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 - MM1 / 2 p22(0) = p19(0) - 3 / 4 * A1: p22(1) = p19(1) p21(0) = p22(0): p21(1) = p20(1) p23(0) = p22(0) - 0.2: p23(1) = p22(1) - 0.2 p24(0) = p23(0): p24(1) = p21(1) + 0.2 ex1(0) = p23(0): ex1(1) = p26(1) ex2(0) = p23(0): ex2(1) = p25(1)

p25(0) = p20(0) - A1: p25(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 - KDe / 2 p26(0) = p25(0): p26(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 + KDe / 2 ex1(0) = p23(0): ex1(1) = p26(1) ex2(0) = p23(0): ex2(1) = p25(1) p31(0) = p26(0) - (A - 0.2): p31(1) = p26(1) p32(0) = p26(0) - A: p32(1) = p31(1) - 0.2 p34(0) = p26(0) - (A - 0.2): p34(1) = p25(1) p33(0) = p26(0) - A: p33(1) = p34(1) + 0.2 diametro = ex1(0) - p26(0)

centro3(0) = (p26(0) + ex1(0)) / 2: centro3(1) = p26(1) espaco.AddArc centro3, diametro / 2, 3.14159254, 0 centro3(0) = (p25(0) + ex1(0)) / 2: centro3(1) = p25(1) espaco.AddArc centro3, diametro / 2, 0, 3.14159254 espaco.AddLine p18, p19 espaco.AddLine p17, p20 espaco.AddLine p19, p20 espaco.AddLine p19, p22 espaco.AddLine p20, p21 espaco.AddLine p21, p22 espaco.AddLine p21, p24 espaco.AddLine p22, p23 espaco.AddLine p23, p24 espaco.AddLine p25, p34 espaco.AddLine p34, p33 espaco.AddLine p33, p32 espaco.AddLine p32, p31 espaco.AddLine p31, p26 espaco.AddLine p31, p34 espaco.AddLine p26, p25

p30(0) = p31(0): p30(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 + KDi / 2 p29(0) = p30(0): p29(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 - KDi / 2 p28(0) = p26(0): p28(1) = p29(1) p27(0) = p26(0): p27(1) = p30(1) espaco.AddLine p30, p27 espaco.AddLine p29, p28 p35(0) = p34(0) - 4: p35(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 p36(0) = p8(0) + 4: p36(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 ThisDrawing.ActiveLayer = layer_ti espaco.AddLine p35, p36 ThisDrawing.ActiveLayer = layer_tg Case 1

Set conn = New ADODB.Connection conn.Open "trabcfac_meu", ""

(19)

Set rs_diametro = conn.Execute("SELECT * FROM dim_haste where diametro=" & Combo_diametro.Value) D = rs_diametro("D") Ce = rs_diametro("Ce") Ci = rs_diametro("Ci") MM1 = rs_diametro("MM1") MM = rs_diametro("diametro_haste") A1 = rs_diametro("A1") conn.Close p17(0) = p16(0): p17(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 - MM / 2 p18(0) = p17(0): p18(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 + MM / 2 nao_sei = 0.2

p19(0) = p18(0) - nao_sei: p19(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 + MM1 / 2 nao_sei = 0.1 p24(0) = p19(0) - A1 + nao_sei: p24(1) = p19(1) p23(0) = p19(0) - A1: p23(1) = p24(1) - nao_sei p22(0) = p23(0): p22(1) = p24(1) - (MM1 - 2 * nao_sei) p21(0) = p24(0): p21(1) = p24(1) - MM1 p20(0) = p19(0): p20(1) = p19(1) - MM1 espaco.AddLine p17, p20 espaco.AddLine p18, p19 espaco.AddLine p19, p24 espaco.AddLine p24, p23 espaco.AddLine p23, p22 espaco.AddLine p22, p21 espaco.AddLine p21, p20 espaco.AddLine p19, p20 espaco.AddLine p24, p21 ThisDrawing.ActiveLayer = layer_ti p22(0) = p22(0) - 3: p22(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 p18(0) = p8(0) + 3: p18(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 espaco.AddLine p22, p18 ThisDrawing.ActiveLayer = layer_tg p13(0) = p24(0): p13(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 + Ce / 2 p14(0) = p24(0): p14(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 - Ce / 2 p15(0) = p13(0) + D: p15(1) = p13(1) p16(0) = p14(0) + D: p16(1) = p14(1) espaco.AddLine p13, p15 espaco.AddLine p14, p16 p13(0) = p24(0): p13(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 + Ci / 2 p14(0) = p24(0): p14(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 - Ci / 2 p15(0) = p13(0) + D: p15(1) = p13(1) p16(0) = p14(0) + D: p16(1) = p14(1) ThisDrawing.ActiveLayer = layer_ti espaco.AddLine p13, p15 espaco.AddLine p14, p16 p13(0) = p24(0): p13(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 + Ci / 2 p14(0) = p24(0): p14(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2 - Ci / 2 p15(0) = p13(0) + D: p15(1) = p13(1) p16(0) = p14(0) + D: p16(1) = p14(1) espaco.AddLine p13, p15 espaco.AddLine p14, p16 espaco.AddLine p15, p16

(20)

p13(0) = p2(0)

espaco.AddLine p13, p15 p14(0) = p2(0)

espaco.AddLine p14, p16

p18(0) = p13(0) + (Ci / 2) * Tan(3.14159254 * 30 / 180): p18(1) = p1(1) + (Val(XB.Value) + 2 * Val(ST.Value)) / 2

espaco.AddLine p13, p18 espaco.AddLine p18, p14 End Select

'---Desenho da extremidade da haste – fim---

'---VISTA DE CIMA - fim---

Vista lateral

'---VISTA LATERAL- início---

Dim layer_tg As AcadLayer Dim layer_ti As AcadLayer

Set layer_tg = ThisDrawing.Layers.Add("tg") Set layer_ti = ThisDrawing.Layers.Add("ti") ThisDrawing.ActiveLayer = layer_tg UserForm1.Hide

MsgBox ("seleccione o ponto de inserção da vista lateral") p1 = ThisDrawing.Utility.GetPoint(, "")

chanfro = 1.6

lado = Val(XB.Value) + 2 * Val(ST.Value) p2(0) = p1(0) + lado - 2 * chanfro: p2(1) = p1(1) p3(0) = p2(0) + chanfro: p3(1) = p2(1) + chanfro p4(0) = p3(0): p4(1) = p3(1) + 2 * Val(H.Value) - 2 * chanfro p5(0) = p4(0) - chanfro: p5(1) = p4(1) + chanfro p6(0) = p1(0): p6(1) = p5(1) p7(0) = p6(0) - chanfro: p7(1) = p6(1) - chanfro p8(0) = p7(0): p8(1) = p3(1) espaco.AddLine p1, p2 espaco.AddLine p2, p3 espaco.AddLine p3, p4 espaco.AddLine p4, p5 espaco.AddLine p5, p6 espaco.AddLine p6, p7 espaco.AddLine p7, p8 espaco.AddLine p8, p1

Set conn = New ADODB.Connection conn.Open "trabcfac_meu", ""

Set rs_diametro = conn.Execute("SELECT * FROM dim_gerais where diametro=" & Combo_diametro.Value)

B = rs_diametro("diametro_b") U = rs_diametro("U")

(21)

Combo_diametro.Value)

raioi = rs_diametro("diametro_interior") / 2 raioe = rs_diametro("diametro_exterior") / 2

Set rs_diametro = conn.Execute("SELECT * FROM dim_haste where diametro=" & Combo_diametro.Value) MM1 = rs_diametro("MM1") MM = rs_diametro("diametro_haste") P = rs_diametro("P") conn.Close centro(0) = (p1(0) + p2(0)) / 2: centro(1) = (p8(1) + p7(1)) / 2 espaco.AddCircle centro, B / 2 espaco.AddCircle centro, MM / 2 espaco.AddCircle centro, P / 2

espaco.AddCircle centro, (P / 2) - (raioe - raioi)

p8(0) = (p1(0) + p2(0)) / 2: p8(1) = p1(1) + Val(H.Value) + P / 2 p9(0) = p8(0) - Sqr((MM / 2) ^ 2 - (P / 2) ^ 2): p9(1) = p8(1) espaco.AddLine p8, p9 p9(0) = p8(0) + Sqr((MM / 2) ^ 2 - (P / 2) ^ 2) espaco.AddLine p8, p9 p8(0) = (p1(0) + p2(0)) / 2: p8(1) = p1(1) + Val(H.Value) - P / 2 p9(0) = p8(0) - Sqr((MM / 2) ^ 2 - (P / 2) ^ 2): p9(1) = p8(1) espaco.AddLine p8, p9 p9(0) = p8(0) + Sqr((MM / 2) ^ 2 - (P / 2) ^ 2) espaco.AddLine p8, p9 p8(0) = (p1(0) + p2(0)) / 2 + P / 2: p8(1) = p1(1) + Val(H.Value) + Sqr((MM / 2) ^ 2 - (P / 2) ^ 2) p9(0) = p8(0): p9(1) = p1(1) + Val(H.Value) - Sqr((MM / 2) ^ 2 - (P / 2) ^ 2) espaco.AddLine p8, p9 p8(0) = (p1(0) + p2(0)) / 2 - P / 2: p8(1) = p1(1) + Val(H.Value) + Sqr((MM / 2) ^ 2 - (P / 2) ^ 2) p9(0) = p8(0): p9(1) = p1(1) + Val(H.Value) - Sqr((MM / 2) ^ 2 - (P / 2) ^ 2) espaco.AddLine p8, p9 ThisDrawing.ActiveLayer = layer_ti p8(0) = (p1(0) + p2(0)) / 2 - Val(N.Value) - raioe: p8(1) = p1(1) p9(0) = p8(0) + (raioe - raioi): p9(1) = p8(1) p11(0) = (p1(0) + p2(0)) / 2 - Val(N.Value) + raioe: p11(1) = p1(1) p10(0) = p11(0) - (raioe - raioi): p10(1) = p11(1) p15(0) = p8(0): p15(1) = p8(1) + Val(H.Value) - U / 2 p12(0) = p11(0): p12(1) = p15(1) p13(0) = p10(0): p13(1) = p12(1) + raioe - raioi p14(0) = p9(0): p14(1) = p15(1) + raioe - raioi p16(0) = p9(0): p16(1) = p14(1) - (raioe - raioi) p17(0) = p10(0): p17(1) = p13(1) - (raioe - raioi) espaco.AddLine p8, p15 espaco.AddLine p15, p14 espaco.AddLine p14, p13 espaco.AddLine p13, p12 espaco.AddLine p12, p11 espaco.AddLine p10, p17 espaco.AddLine p9, p16 espaco.AddLine p16, p17 p9(0) = (p9(0) + p10(0)) / 2: p9(1) = p9(1) - 2 p14(0) = (p14(0) + p13(0)) / 2: p14(1) = p14(1) + 10 espaco.AddLine p9, p14 p14(0) = p14(0) - 1: p14(1) = p14(1) - 10

(22)

p9(0) = p14(0): p9(1) = p14(1) + 8 espaco.AddLine p9, p14 p14(0) = p14(0) + 2 p9(0) = p14(0) espaco.AddLine p9, p14 p18(0) = p7(0) - 2: p18(1) = p1(1) + Val(H.Value) p19(0) = p3(0) + 2: p19(1) = p18(1) espaco.AddLine p18, p19 p18(0) = (p5(0) + p6(0)) / 2: p18(1) = p6(1) + 2 p19(0) = (p1(0) + p2(0)) / 2: p19(1) = p1(1) - 2 espaco.AddLine p18, p19

p18(0) = p7(0): p18(1) = p1(1) + Val(H.Value) + Val(G.Value) + raioe p19(0) = p18(0): p19(1) = p18(1) - (raioe - raioi)

p21(0) = p19(0): p21(1) = p1(1) + Val(H.Value) + Val(G.Value) - raioe p20(0) = p18(0): p20(1) = p21(1) + (raioe - raioi) p22(0) = p21(0) + (p15(1) - p8(1)): p22(1) = p21(1) p23(0) = p22(0) + raioe - raioi: p23(1) = p20(1) p24(0) = p23(0): p24(1) = p19(1) p25(0) = p22(0): p25(1) = p18(1) p26(0) = p22(0): p26(1) = p19(1) p27(0) = p22(0): p27(1) = p20(1) espaco.AddLine p18, p25 espaco.AddLine p25, p24 espaco.AddLine p24, p23 espaco.AddLine p23, p22 espaco.AddLine p22, p21 espaco.AddLine p20, p27 espaco.AddLine p19, p26 espaco.AddLine p26, p27 p19(0) = p19(0) - 2: p19(1) = (p19(1) + p20(1)) / 2 p26(0) = p26(0) + 14: p26(1) = (p26(1) + p27(1)) / 2 espaco.AddLine p26, p19 p26(0) = p24(0): p26(1) = (p23(1) + p24(1)) / 2 + 1 p25(0) = p26(0) + 12: p25(1) = p26(1) espaco.AddLine p26, p25 p26(1) = (p23(1) + p24(1)) / 2 - 1 p25(0) = p26(0) + 12: p25(1) = p26(1) espaco.AddLine p26, p25 p2(0) = p2(0) - 1 p4(1) = p5(1) - 0.9 * Val(ST.Value) p5(0) = p2(0): p5(1) = p4(1) p8(0) = p5(0) - Val(ST.Value): p8(1) = p5(1) p7(0) = p4(0) - Val(ST.Value) - 2 * chanfro - 2: p7(1) = p4(1) p10(0) = p7(0): p10(1) = p6(1) p9(0) = p2(0) - Val(ST.Value): p9(1) = p2(1) espaco.AddLine p2, p5 espaco.AddLine p4, p7 espaco.AddLine p7, p10 espaco.AddLine p9, p8 p2(0) = (p2(0) + p9(0)) / 2: p2(1) = p2(1) - 2 p3(0) = p2(0): p3(1) = p10(1) + 2 espaco.AddLine p2, p3

(23)

'---VISTA LATERAL - fim---

Final - desenho das vistas

Antes de terminar o desenho de uma vista, é dada ao utilizador a possibilidade de

efectuar um zoom ao desenho, em particular um Zoom Extents, como se pode ver através

da seguinte imagem:

Fig. 7 – Possibilidade de zoom no final do desenho.

Assim, antes de terminar a subrotina de uma vista, utiliza-se o seguinte código:

Continue = MsgBox("Zoom extents ao desenho?", vbYesNo + vbQuestion, "Zoom?") If Continue = vbNo Then

End

ElseIf Continue = vbYes Then

ThisDrawing.SendCommand "Zoom " & "Extents " ThisDrawing.Regen (acActiveViewport)

End End If

(24)

Agradecimento

Uma palavra final de agradecimento ao Eng. Joaquim Fonseca, docente das aulas

práticas da disciplina, pelos esclarecimentos prestados ao longo da realização deste

trabalho.

Bibliografia

• Marques F, Mendes A, Henriques M, Sena R. Programação de Bases de Dados com

Visual Basic 6 – Curso Completo. 2ª Edição. FCA. 2001.

• Morais S. Desenho Técnico Básico – Desenho de Construções Mecânicas 3º Volume.

22ª Edição. Porto Editora. 2003.

Referências

Documentos relacionados

Focamos nosso estudo no primeiro termo do ensino médio porque suas turmas recebem tanto os alunos egressos do nono ano do ensino fundamental regular, quanto alunos

A cirurgia, como etapa mais drástica do tratamento, é indicada quando medidas não invasivas como dietas restritivas e a prática regular de exercícios físicos

Quanto às suas desvantagens, com este modelo, não é possível o aluno rever perguntas ou imagens sendo o tempo de visualização e de resposta fixo e limitado;

Os principais resultados obtidos pelo modelo numérico foram que a implementação da metodologia baseada no risco (Cenário C) resultou numa descida média por disjuntor, de 38% no

Considerando a amplitude da rede mundial de computadores (internet) e a dificuldade em controlar as informações prestadas e transmitidas pelos usuários, surge o grande desafio da

É nesse cenário que o direito do trabalho vem a suportar maior prejuízo, ao passo que nenhum outro ramo do direito vive tão próximo das manifestações econômicas como o

Como já foi dito neste trabalho, a Lei de Improbidade Administrativa passa por uma releitura doutrinária e jurisprudencial, visando delimitar de forma precisa os tipos ímprobos,

O tema proposto neste estudo “O exercício da advocacia e o crime de lavagem de dinheiro: responsabilização dos advogados pelo recebimento de honorários advocatícios maculados