Hoje pra mudar um pouco, vou postar alguma coisa do civil 3d... alguem (assim como eu) já deve ter tentado programar qualquer coisa para ele e, a princípio, fez em VBA, usando os exemplos do próprio programa... mas e em Visual Lisp? será que dá? sim!!! dá!! e nem é tão complicado... que já "conectou" o autocad com o access/excel não vai ter dificuldade nenhuma...
bom, da forma que eu fiz, primeiro defino algumas variáveis globais (que serão usadas em várias subrotinas):
(setq acadapp (vlax-get-acad-object)
aec-app (vla-GetInterfaceObject acadapp "AeccXUiLand.AeccApplication")
aec-adoc (vla-get-activedocument aec-app)
aec-db (vla-get-database aec-adoc)
aec-pts (vlax-get-property aec-db "points")
aec-surfs (vlax-get-property aec-db "surfaces"))
bom... não vou explicar o que cada função faz... leia o help do civil também, hehehe!!!
estas variáveis serão usadas, por exemplo, nesta rotina:
(defun aec-get-point-by-name (name / lst)
(vl-catch-all-apply
'vlax-map-collection
(list aec-pts '(lambda (pt) (if (wcmatch (vlax-get-property pt "Name") name) (setq lst (cons pt lst))))))
lst)
quem usa pontos de levantamento topográfico, sabe que as vezes o ponto vem com o nome duplicado, com caracteres alfanuméricos... mas o PointNumber só aceita número inteiro... nestes casos, em vez de usar a propriedade PointNumber, pode-se usar a PointName, assim o croquis do levantamento terá pontos com nomes coerentes com o desenho do cad... já que PointName aceita caracteres alfanuméricos... assim, se quisermos o(s) ponto(s) de nome "E1" por exemplo, basta usar: (aec-get-point-by-name "E1") e, da maneira que a subrotina foi escrita, pode-se usar: (aec-get-point-by-name "E*") e isto nos retornaria uma lista com os pontos cujo nome comecem com "E"... sacam?
logo posto uma rotina que usa esta subrotina..
bom, da forma que eu fiz, primeiro defino algumas variáveis globais (que serão usadas em várias subrotinas):
(setq acadapp (vlax-get-acad-object)
aec-app (vla-GetInterfaceObject acadapp "AeccXUiLand.AeccApplication")
aec-adoc (vla-get-activedocument aec-app)
aec-db (vla-get-database aec-adoc)
aec-pts (vlax-get-property aec-db "points")
aec-surfs (vlax-get-property aec-db "surfaces"))
bom... não vou explicar o que cada função faz... leia o help do civil também, hehehe!!!
estas variáveis serão usadas, por exemplo, nesta rotina:
(defun aec-get-point-by-name (name / lst)
(vl-catch-all-apply
'vlax-map-collection
(list aec-pts '(lambda (pt) (if (wcmatch (vlax-get-property pt "Name") name) (setq lst (cons pt lst))))))
lst)
quem usa pontos de levantamento topográfico, sabe que as vezes o ponto vem com o nome duplicado, com caracteres alfanuméricos... mas o PointNumber só aceita número inteiro... nestes casos, em vez de usar a propriedade PointNumber, pode-se usar a PointName, assim o croquis do levantamento terá pontos com nomes coerentes com o desenho do cad... já que PointName aceita caracteres alfanuméricos... assim, se quisermos o(s) ponto(s) de nome "E1" por exemplo, basta usar: (aec-get-point-by-name "E1") e, da maneira que a subrotina foi escrita, pode-se usar: (aec-get-point-by-name "E*") e isto nos retornaria uma lista com os pontos cujo nome comecem com "E"... sacam?
logo posto uma rotina que usa esta subrotina..
Nenhum comentário:
Postar um comentário