Obs: esta é a minha experiência com este programa, se alguem souber de uma forma melhor, estou interessadíssimo em saber!!!!
bom, o que o programinha abaixo faz isso, ele analiza as coordenadas X,Y da pline, procura pontos do CIVIL 3D que tenham as coordenadas X,Y requeridas e usa a coordenada Z deste ponto para construir a 3dpoly… possibilitando assim o uso destas como breakline, bom vamos lá, a primeira coisa é obter a “collection” dos pontos do civil:
(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”))
Isso aí acima é coloco numa subrotina, que fará parte de um projeto de rotina VLX, ok? por isso não tem defun nem nada… outra hora eu explico isso…
agora vamos a rotina:
(defun c:2dto3d (/ ss lst lsc ent pts flag a erro)
(tbn:error-init (list (list “cmdecho” 0) t))
(setq ss (ssget ‘((0 . “LWPOLYLINE”)))
lst nil
lsc nil
flag (initget “S N” 0)
flag (getkword
“nApagar as entidades convertidas? [Sim, Não]
flag (= “S”
(if flag
flag
“S”)))
(vlax-map-collection
aec-pts ;********vide o código acima************
‘(lambda (x)
(setq lst (cons (list (vlax-get-property x “Easting”)
(vlax-get-property x “Northing”))
lst))))
(vlax-map-collection
aec-pts
‘(lambda (x)
(setq lsc (cons (list (vlax-get-property x “Elevation”)) lsc))))
(repeat (if ss
(sslength ss)
0)
(setq ent (ssname ss 0)
erro nil
pts (apply ‘append
(mapcar
‘(lambda (pt / tmp)
(foreach a lst
(if (equal a pt 0.5)
(setq tmp a)))
(if tmp
(append pt (nth (vl-position tmp lst) lsc))
(setq erro (cons pt erro))))
(get-points-polig ent))))
(if erro
(progn
(remake-ent ent 62 1)
(foreach a erro
(entmake (list ‘(0 . “CIRCLE”)
‘(8 . “ERRO_3d_Poly”)
(cons 10 a)
‘(40 . 1)))))
(progn
(setq linha
(vla-Add3Dpoly
(get-activespace)
(vlax-safearray-fill
(vlax-make-safearray
vlax-vbdouble
(cons 0 (1- (length pts))))
pts)))
(vla-put-layer linha (dxf 8 ent))
(vla-put-color linha 2)
(if flag
(entdel ent))))
(grtext -2 (itoa (sslength ss)))
(ssdel ent ss))
(tbn:error-restore ))
é isso… o programa vai pedir se você desenha apagar as linhas antigas e tentará desenhar novas linhas 3d pelas coordenadas obtidas, se a linha for desenhada, ela aparecerá no mesmo layer que estava a linha original, mas estará em AMARELO, ja para as linhas que ela não conseguir desenhar, a linha original terá sua cor alterada para VERMELHO e ainda terá o(s) vértice(s) coordenadas não encontradas nos pontos do civil marcados com um CÍRCULO no layer “ERRO_3d_Poly” para que você possa analizar o que fazer (inserir um ponto, mudar o vértice…)
Olá Neyton, vc tem alguma apostila, em português, do Civel 3D?
Um a migo meu me pediu para arranjar, mas não encontrei nenhum pelo Google.
PS: Gostei muito do seu Blog, já até adicionei aos meu favoritos! Parabéns.
_____________
Marcus Malzer