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