;importa as funções do civil 3d para o visual lisp
(vlax-import-type-library
:tlb-filename “C:\\Program Files\\AutoCAD Civil 3D 2008\\Civil\\AeccXLand.tlb”
:methods-prefix “cvlm-“
:properties-prefix “cvlp-“
:constants-prefix “cvlc-“)
Veja, ele importa os métodos, propriedades e constantes do Civil 3d para o visual lisp
Qual a utilidade disso? bem… você sabe programar em vba? não? sabe em visual lisp?
então…. com isso você pode manipular entidades do civil 3d via lisp!!
um exemplo:
digamos que queiramos obter uma polilinha que passe pelos pontos de um alinhamento… sei lá pra que, mas precisamos fazer isso…
o civil 3d tem um comando que faz o inverso, pega uma polilinha e cria o alinhamento, mas não tem um comando que cria uma polilinha a partir de um alinhamento!! como fazer?
Command: pline
bom, veja:
(defun c:alin2pline (/ ss ent)
(tbn:error-init nil)
(if (setq ss (ssget ‘((0 . “AECC_ALIGNMENT”))))
(repeat (sslength ss)
(setq ent (ssname ss 0))
(cvlm-GetLWPolyline (vlax-ename->vla-object ent))
(ssdel ent ss)))
(tbn:error-restore ))
a palavra cvlm-GetLWPolyline so existe APÓS você importar a “type library” do civil 3d que contem o método GetLWPolyline, saca?
essas “type library” estão em “C:Program FilesAutoCAD Civil 3D 2008Civil”, no caso do c3d2k8…
agora me pergunte COMO saber que novos métodos você dispõe??
experimente isto:
(setq tmp (atoms-family 1) file (open “d:/cvl.txt” “w”))
(foreach x tmp
(if (= “CVL” (strcase (substr x 1 3))) (write-line x file)))
(close file)
(startapp “notepad.exe” “d:/cvl.txt”)
isto irá criar um arquivo de texto no drive D: com todos os métodos, propriedades e constantes importados…
tá, e o help de cada uma delas????????
ache este arquivo:
“C:Program FilesAutoCAD Civil 3D 2008Helpcivilauto-reference.chm”
abra este tópico:
“AeccXLandLib Library”, nele ache “IAeccAlignment Interface”
nele você acha o método que usei no exemplo (GetLWPolyline)
como usar o help?
o help deste método, é algo assim:
Gets the lightweight polyline from alignment geometry.
HRESULT GetLWPolyline(
[out, retval] IAcadLWPolyline ** ppLWPolyline
);
isto é em C, mas é fácil entender…
é quase como os métodos activex ( as famosas VL* ) do cad
ficaria em visual lisp:
(cvlm-GetLWPolyline vlaobj)
onde vlaobj é o vla-object name do alinhamento ( veja o exemplo acima!! )
outro exemplo:
(setq vla (vlax-ename->vla-object (car (entsel “\nSelecione um alinhamento”)))
station (cvlp-get-startingstation vla)
offset 0)
(cvlm-PointLocation vla station offset ‘x ‘y)
(prompt (strcat “o ponto inicial é “ (rtos x) “, “ (rtos y)))
simples né?
o método pointlocation, no help é assim:
HRESULT PointLocation(
[in] double Station,
[in] double Offset,
[out] double* Easting,
[out] double* Northing
);
em lisp, o método PointLocation ficaria:
(cvlm-PointLocation vla station offset ‘x ‘y)
onde:
“cvlm-” é o prefixo que eu escolho para indicar os métodos
vla é o vla-object do alignment
station é a estaca
offset é a distancia perpendicular ao alinhamento na estaca escolhida