0% acharam este documento útil (0 voto)
240 visualizações17 páginas

Começando Visual LISP

O documento introduz o Visual LISP e mostra como acessar objetos no modelo de objeto do AutoCAD usando código VLISP. Ele carrega as funções VLISP, obtém referências para o objeto de aplicativo do AutoCAD e o documento ativo, e então examina as propriedades desses objetos como camadas e espaço do modelo.

Enviado por

Luiz Silva
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
240 visualizações17 páginas

Começando Visual LISP

O documento introduz o Visual LISP e mostra como acessar objetos no modelo de objeto do AutoCAD usando código VLISP. Ele carrega as funções VLISP, obtém referências para o objeto de aplicativo do AutoCAD e o documento ativo, e então examina as propriedades desses objetos como camadas e espaço do modelo.

Enviado por

Luiz Silva
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 17

Comeando Visual LISP - Parte 1

por Kenny Ramage Ento, voc quer comear a programar usando o Visual Lisp? Duas coisas. Primeiro, voc realmente precisa ter um bom entendimento do AutoLisp antes de continuar com este tutorial.VLISP no um substituto para AutoLisp, uma extenso para isso. Padro AutoLisp amplamente utilizado em todo Visual Lisp, portanto, um bom conhecimento uma necessidade.Em segundo lugar, neste tutorial eu no vou mergulhar o porqu e onde est de VLISP. A inteno dar-lhe uma formao bsica em VLISP o que pode fazer e como proceder para faz-lo. Por exemplo, alguns dos meus terminologia pode no ser tecnicamente correto, como eu tendia a converter algumas coisas para termos leigos para maior clareza e facilidade de compreenso. No se preocupe, ns vamos corrigir tudo isso em tutoriais futuros. OK, voc est pronto para comear? Direito, o fogo at o AutoCAD com um desenho em branco e abrir o Editor do Visual Lisp. Voc pode escrever Lisp Visual usando o Bloco de Notas como AutoLisp se quiser, mas eu prefiro usar o Editor do Visual Lisp que pudermos, e, use o "Watch" e "Inspecionar" janelas. Feche a janela do Editor, deixando a janela "Console" aberta, e, em seguida, abrir a janela "Watch".Certo, estamos prontos para comear. Digite isso no prompt do Console e, em seguida, pressione Enter:

_ $ (Vl-load-com)
Voc notou que nada aconteceu? Antes que voc possa usar as funes VLISP com AutoLisp, voc precisa carregar o cdigo de suporte que permite que essas funes. Os (vl-load-com) funo primeiro verifica se o apoio VLISP j est carregado e, nesse caso, a funo no faz nada. Se as funes no so carregados, (vl-load-com) carrega-los. Muito importante, eu diria! "Todos os aplicativos que usam Visual Lisp deve comear pelo telefone (vl-load-com). If (vlload-com) no est carregado, o aplicativo falhar." Depois de carregar as funes do Visual Lisp, o prximo passo estabelecer a comunicao com o objeto de aplicativo AutoCAD. Pense em um armrio. O gabinete em si o seu computador e uma das gavetas do armrio de arquivamento o AutoCAD. Vamos abrir a gaveta AutoCAD para ter um olhar para o que est dentro. Para estabelecer esta conexo, usamos a funo (vlax-get-acad-objeto). Digite isso no prompt do Console e, em seguida, pressione Enter:

_ $ (Setq acadObject (vlax-get-acad-object))

Agora, d um clique duplo na varivel "acadObject" na janela do console para selecion-lo e, em seguida, adicion-lo janela "Watch". Deve ser algo parecido com isto:

Estamos agora a olhar para o objeto Application Acad. D um duplo clique em "ACODBJECT" no "janela de inspeo para abrir a" janela "Inspecione:

Esta uma lista de todos os objetos dentro do objeto Aplicativo do AutoCAD. Agora clique duas vezes sobre <Preferences>:

Este todos os objetos dentro do AutoCAD - Aplicao - objeto Preferences. Agora clique duas vezes sobre <arquivos>:

Compare essa lista com o que voc v quando abre a caixa de dilogo Opes-Files:

Antes de comear esta seo, eu acho que pode ser uma boa idia se voc aparecer bem e ter um olhar para o modelo de objeto de AutoCAD:

Na verdade, imprimi-lo e t-lo ao seu lado enquanto voc trabalha atravs desses tutoriais. como ter um mapa rodovirio.

De qualquer forma, onde estvamos? Oh, sim. Estamos indo agora para tentar extrair o Path Apoio AutoCAD a partir do Modelo de Objeto usando VLISP. Vamos lev-lo para a direita a partir do topo para o caso de voc ficou um pouco perdido. Aqui vamos ns. Digite todas as seguintes declaraes para a janela do Console, pressionando "Enter" aps cada um: As linhas em vermelho so o que retorna VLISP, no digit-los! Carregue o apoio VLISP.

_ $ (Vl-load-com)
Armazenar uma referncia para o objeto Aplicativo

_ $ (Setq acadObject (vlax-get-acad-object)) # <VLA-OBJECT 00adc088> IAcadApplication


Armazenar uma referncia para o objeto Preferences

_$ (setq prefsObject (vlax-get-property acadObject 'Preferences)) #<VLA-OBJECT IAcadPreferences 018adfdc>


Armazenar uma referncia para os arquivos objeto

_$ (setq tabnameObject (vlax-get-property prefsObject 'Files)) #<VLA-OBJECT IAcadPreferencesFiles 018adfc0>


Obter o caminho de suporte

_$ (setq thePath (vlax-get-property tabnameObject 'SupportPath)) "D:\\ACAD2000\\SUPPORT;D:\\ACAD2000\\FONTS; D:\\ACAD2000\\HELP;D:\\ACAD2000\\EXPRESS"


"Jings, isso timo, mas podemos adicionar um novo diretrio para o nosso caminho de suporte?" Claro que pode, mas primeiro precisamos adicionar o nosso novo caminho para a varivel de caminho existente. O que devemos usar? Fcil, vamos usar a funo (strcat):

_$ (setq thePath (strcat thePath ";" "C:\\TEMP")) "D:\\ACAD2000\\SUPPORT;D:\\ACAD2000\\FONTS; D:\\ACAD2000\\HELP;D:\\ACAD2000\\EXPRESS;C:\\TEMP"


Ns adicionamos o novo diretrio na varivel de caminho de suporte, ento agora vamos atualiz-lo. Digite esta linha:

_$ (vlax-put-property tabnameObject 'SupportPath thePath) nil

Agora, volte para AutoCAD e v em "Ferramentas" - "Opes" - "Arquivos" - "Suporte Caminho de pesquisa." O seu novo diretrio, C :/ TEMP, deve ter sido adicionado ao seu caminho de Apoio. Hey fcil morto? Este material VLISP fcil! Certo, ns abrimos o armrio gaveta AutoCAD arquivamento (o objeto Aplicativo) e tinha um olhar para as caractersticas de gaveta. Agora precisamos aprofundar a gaveta e dar uma olhada em uma das pastas de documentos armazenados no interior.

_ $ (Vl-load-com)

_$ (setq acadObject (vlax-get-acad-object)) #<VLA-OBJECT IAcadApplication 00adc088>


Armazenar uma referncia para o documento ativo. (O desenho que enganar!)

_$ (setq acadDocument (vla-get-ActiveDocument acadObject)) #<VLA-OBJECT IAcadDocument 00ee0f84>


Clique duas vezes para selecionar a varivel "acadDocument" e adicion-lo janela "Watch":

Agora d um duplo clique em "ACADDOCUMENT" Objeto.

Uau, olha para tudo isso! Agora clique duas vezes sobre <Layers>:

Ha, temos agora perfurado para baixo para todas as camadas includas no desenho. Em outras palavras, a "Coleco Layers". "Tudo bem, isso timo", eu posso ouvir voc dizer: "Eu posso ver que h 13 camadas neste desenho, mas onde esto as camadas Direito entrar nessa?:

_$ (vl-load-com)

_$ (setq acadDocument (vla-get-activedocument (vlax-get-acad-object))) #<VLA-OBJECT IAcadDocument 00ee0f84>

_$ (setq theLayers (vla-get-layers acadDocument)) #<VLA-OBJECT IAcadLayers 018aee84>


Agora estamos orgulhosos proprietrios de todas as camadas neste desenho particular. Voc gostaria de ter um olhar pequenino para eles? Basta ter muito cuidado e no deix-los! Digite o seguinte no prompt do Console, pressionando "Ctrl" e depois "Enter" depois de cada linha.Aps a linha final, o parntese de fechamento, pressione "Enter":

_$ (setq i 0) (repeat (vla-get-count theLayers) (setq aLayer (vla-item theLayers i)) (princ (vla-get-name aLayer)) (terpri) (setq i (1+ i)) )
Todos os nomes de camadas no desenho deve ser listado. Mina se parece com isso:

1 2 3 4 5 6 7 8 9 10 12 DEFPOINTS
Gostaria de dar uma olhada em uma das camadas em seu desenho? Em seguida, digite o seguinte:

(setq aLayer (vla-item theLayers "2")) #<VLA-OBJECT IAcadLayer 018aeec4>


Temos agora acessados Layer "2" da coleo Layers. Vamos listar todas as propriedades e mtodos desta camada:

_$ (vlax-dump-object aLayer T)

; IAcadLayer: A logical grouping of data, similar to transparent acetate overlays on a drawing ; Property values: ; Application (RO) = #<VLA-OBJECT IAcadApplication 00adc088> ; Color = 2 ; Document (RO) = #<VLA-OBJECT IAcadDocument 00ee0f84> ; Freeze = 0 ; Handle (RO) = "40" ; HasExtensionDictionary (RO) = 0 ; LayerOn = -1 ; Linetype = "DASHED2" ; Lineweight = -3 ; Lock = 0 ; Name = "2" ; ObjectID (RO) = 21872128 ; ObjectName (RO) = "AcDbLayerTableRecord" ; OwnerID (RO) = 21871632 ; PlotStyleName = "Color_511" ; Plottable = -1 ; ViewportDefault = 0 ; Methods supported: ; Delete () ; GetExtensionDictionary () ; GetXData (3) ; SetXData (2) T
Quer mudar a sua cor Layers? Digite o seguinte:

_$ (vla-put-color aLayer 4) nil


Este ter mudado a sua camada de "2" cor de "Ciano" ou cor "4", incluindo a cor de todos os objetos dentro do desenho na camada "2" com a cor "Por camada". D uma olhada em volta para o Document Object. H pilhas de ver e babar. Agora voc pode ver o poder e as capacidades do Visual Lisp?

Na prxima pgina, vamos aprofundar ainda mais e comear a ter um olhar para a criao, a seleo ea mudana entidades de desenho.

Praticamente o mesmo hein? Na Parte 2 , vamos dar uma olhada em como podemos acessar esses objetos programaticamente.

Comeando Visual LISP - Parte 3


por Kenny Ramage Veja tambm: Parte 1 Parte 2 Antes de podermos criar entidades, ou objetos, dentro de AutoCAD, preciso decidir "onde" queremos desenhar, o espao do modelo ou espao do papel. E para fazer isso, precisamos criar uma referncia para a rea em que gostaria de desenhar. Lembre-se de nosso armrio? O objeto Application foi nossa gaveta, o Document Object foi nossa pasta, e agora o espao Object Model ser o nosso pedao de papel. Vamos dar uma olhada no espao Object Model:

_$ (setq modelSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-Acad-Object)))) #<VLA-OBJECT IAcadModelSpace 018ade24>


Agora execute um dump no objeto modelspace:

_$ (vlax-dump-object modelSpace T) ; IAcadModelSpace: A special Block object containing all model space entities ; Property values: ; Application (RO) = #<VLA-OBJECT IAcadApplication 00adc088> ; Count (RO) = 0 ; Document (RO) = #<VLA-OBJECT IAcadDocument 00ee0f84> ; Handle (RO) = "18" ; HasExtensionDictionary (RO) = 0 ; IsLayout (RO) = -1 ; IsXRef (RO) = 0 ; Layout (RO) = #<VLA-OBJECT IAcadLayout 018ad934> ; Name = "*MODEL_SPACE" ; ObjectID (RO) = 21871808 ; ObjectName (RO) = "AcDbBlockTableRecord" ; Origin = (0.0 0.0 0.0) ; OwnerID (RO) = 21871624 ; XRefDatabase (RO) = AutoCAD.Application: No database

; Methods supported: ; Add3DFace (4) ; Add3DMesh (3) ; Add3DPoly (1) ; AddArc (4) ; AddAttribute (6) ; AddBox (4) ; AddCircle (2) ; AddCone (3) ; AddCustomObject (1) ; AddCylinder (3) ; AddDim3PointAngular (4) ; AddDimAligned (3) ; AddDimAngular (4) ; AddDimDiametric (3) ; AddDimOrdinate (3) ; AddDimRadial (3) ; AddDimRotated (4) ; AddEllipse (3) ; AddEllipticalCone (4) ; AddEllipticalCylinder (4) ; AddExtrudedSolid (3) ; AddExtrudedSolidAlongPath (2) ; AddHatch (3) ; AddLeader (3) ; AddLightWeightPolyline (1) ; AddLine (2) ; AddMInsertBlock (10) ; AddMLine (1) ; AddMText (3) ; AddPoint (1) ; AddPolyfaceMesh (2) ; AddPolyline (1) ; AddRaster (4)

; AddRay (2) ; AddRegion (1) ; AddRevolvedSolid (4) ; AddShape (4) ; AddSolid (4) ; AddSphere (2) ; AddSpline (3) ; AddText (3) ; AddTolerance (3) ; AddTorus (3) ; AddTrace (1) ; AddWedge (4) ; AddXline (2) ; AttachExternalReference (8) ; Bind (1) ; Delete () ; Detach () ; GetExtensionDictionary () ; GetXData (3) ; InsertBlock (6) ; Item (1) ; Reload () ; SetXData (2) ; Unload () T
Hey interessante? Agora vamos desenhar algo. Digite este cdigo:

(setq pt1 (getpoint "\nSpecify First Point : ")) (while (setq pt2 (getpoint "\nSpecify next point : " pt1)) (vla-addline modelSpace (vlax-3d-point pt1) (vlax-3d-point pt2)) (setq pt1 pt2) ) (428.748 578.851 0.0) (524.783 509.712 0.0)
Enfim, ns finalmente tirado alguma coisa. Agora digite o seguinte:

_$ (setq pt1 (getpoint "\nSpecify First Point : ")) (setq pt2 (getpoint "\nSpecify next point : " pt1)) (setq ourLine (vla-addline modelSpace (vlax-3d-point pt1) (vlax-3d-point pt2))) (922.321 585.542 0.0) (1016.12 300.064 0.0) #<VLA-OBJECT IAcadLine 018ab094>
Voc notou que a (setq declarao ourLine Isso define uma referncia para o nosso objeto de linha Vamos executar um despejo sobre isso?.:

_$ (vlax-dump-object ourLine T) ; IAcadLine: AutoCAD Line Interface ; Property values: ; Angle (RO) = 5.02985 ; Application (RO) = #<VLA-OBJECT IAcadApplication 00adc088> ; Color = 256 ; Delta (RO) = (93.8012 -285.479 0.0) ; Document (RO) = #<VLA-OBJECT IAcadDocument 00ee0f84> ; EndPoint = (1016.12 300.064 0.0) ; Handle (RO) = "95D" ; HasExtensionDictionary (RO) = 0 ; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 018aa2b4> ; Layer = "7" ; Length (RO) = 300.494 ; Linetype = "BYLAYER" ; LinetypeScale = 1.0 ; Lineweight = -1 ; Normal = (0.0 0.0 1.0) ; ObjectID (RO) = 21873192 ; ObjectName (RO) = "AcDbLine" ; OwnerID (RO) = 21871808 ; PlotStyleName = "ByLayer" ; StartPoint = (922.321 585.542 0.0) ; Thickness = 0.0 ; Visible = -1

; Methods supported: ; ArrayPolar (3) ; ArrayRectangular (6) ; Copy () ; Delete () ; GetBoundingBox (2) ; GetExtensionDictionary () ; GetXData (3) ; Highlight (1) ; IntersectWith (2) ; Mirror (2) ; Mirror3D (3) ; Move (2) ; Offset (1) ; Rotate (2) ; Rotate3D (3) ; ScaleEntity (2) ; SetXData (2) ; TransformBy (1) ; Update () T
Temos, agora, uma lista de todas as propriedades e mtodos do nosso objeto de linha. Vamos mudar algumas das suas propriedades: Vamos mudar de camada:

_$ (vla-put-layer ourLine 2) nil


E agora a cor:

_$ (vla-put-color ourLine 6) nil


Vamos apagar a nossa linha:

_$ (entdel (vlax-vla-object->ename ourLine)) <Entity name: 14dc1f8>

Voc notou como usamos um comando padro AutoLisp (entdel) para excluir a linha? Mas antes que pudssemos fazer isso, tivemos que converter o Object Reference VLISP a um AutoLisp Nome da Entidade. Voc provavelmente est se perguntando por que ns no apenas usar a funo AutoLisp (comando) para desenhar ou alterar entidades. Se voc usar o reator funes de call-back, voc no tem permisso para utilizar a funo (comando). Se termos como objetos, propriedades, mtodos e eventos de som double holands para voc, ter uma leitura atravs de Uma Introduo ao VBA . Isto est escrito em VBA, mas grande parte da mesma terminologia se aplica a Visual Lisp. Bem, espero que este lhe deu uma viso sobre o uso do Visual Lisp? No se preocupe, ns vamos estar a olhar muito mais atento a todos os aspectos de Visual Lisp em futuros tutoriais. Isto s para voc comear e dar-lhe um gostinho do que est por vir.

Fonte: http://www.afralisp.net/visual-lisp/tutorials/beginning-visual-lisp-part-1.php

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy