retorna uma lista (xPI yPI R Teta Dc Cx Cy Sent Lc1 Sc1 EstTsPC EstSc Tc1 Lc2 Sc2 EstStPt EstCs Tc2)
onde:
xPI, yPI – coordenadas do PI
R, Teta, Dc – raio, angulo central, desenvolvimento da parte em ARCO da curva
Cx, Cy – coordenadas do centro da parte em arco da curva
Sentido – “a” anti-horário, “h” horário
Lc1, Sc1 – comprimento e angulo total da espiral inicial
EstTsPC – Estaca inicial da Curva ( circular ou de transição )
EstSc – Estaca inicial do trecho em ARCO de uma curva de transição
Tc1 – comprimento da tangente inicial ( distancia PI EstTsPc )
Lc2, Sc2 – comprimento e angulo total da espiral final
EstStPt – Estaca final da Curva ( circular ou de transição )
EstCs – Estaca final do trecho em ARCO de uma curva de transição
Tc2 – comprimento da tangente final ( distancia PI EstStPt )
(setq vla (vlax-ename->vla-object (car (entsel))))
(get-lst-pih vla)
|;
(defun get-lst-pih (vla / vlaentities id lst2 n el e pis seco tp x1 y1 x2 y2 a b tmp arc spi spo esi esf)
(setq vlaentities (cvlp-get-entities vla)
id (cvlp-get-FirstEntity vlaentities))
(
repeat (cvlp-get-count vlaentities)(setq e (cvlm-EntityAtId vlaentities id)
id (cvlp-get-Entityafter e)
lst2 (cons e lst2)))
;inicia as variaveis
(setq n 1
;primeira entidade da lista
el (car lst2)
;coordenada do ponto inicial:
pis (list (list (cvlp-get-endeasting el) (cvlp-get-endnorthing el))))
;pega todas as entidades e extrai os dados
(repeat (1- (length lst2))
(setq
;entidade corrente
e (nth n lst2)
;entidade anterior
el (nth (1- n) lst2)
;a entidade é uma linha reta?
tp (= cvlc-aecctangent (cvlp-get-type e))
;a anterior tb? entao é um PI sem curva
seco (and tp (= cvlc-aecctangent (cvlp-get-type el)))
;estaca inicial e final da entidade
esi (cvlp-get-startingstation e)
esf (cvlp-get-endingstation e)
n (1+ n))
;coordenadas do TS,PC e CP,TS
(cvlm-PointLocationex vla esi 0 0 ‘x1 ‘y1 ‘a)
(cvlm-PointLocationex vla esf 0 0 ‘x2 ‘y2 ‘b)
(
if seco(setq pis (cons (list (list x2 y2)) pis))
(if (not tp)
(setq arc (if (vlax-property-available-p e “Radius”)
e
(if (vlax-property-available-p e “Arc”) (cvlp-get-arc e)))
spi (if (vlax-property-available-p e “SpiralIn”) (cvlp-get-SpiralIn e))
spo (if (vlax-property-available-p e “SpiralOut”) (cvlp-get-SpiralOut e))
;para compatibilizar com o c3d2k7:
tmp (inters (list x1 y1) (list (+ x1 (sin a)) (+ y1 (cos a))) ;vetor direcional
(list x2 y2) (list (+ x2 (sin b)) (+ y2 (cos b))) ;vetor direcional
nil)
pis (cons (list
;no c3d2k8 basta:
;(list (cvlp-get-pieasting e) (cvlp-get-pinorthing e))
(car tmp)
(cadr tmp)
(if arc (vla-get-radius arc)) ;Raio do arco
(if arc (cvlp-get-delta arc)) ;Teta (angulo do arco)
(if arc (cvlp-get-length arc)) ;Dc
(if arc (cvlp-get-CenterEasting arc)) ;centroX
(if arc (cvlp-get-CenterNorthing arc)) ;centroY
(if arc (if (= :vlax-true (cvlp-get-clockwise arc)) “h” “a”))
(if spi (vla-get-length spi)) ;Lc1
(if spi (cvlp-get-delta spi)) ;Sc1 (angulo)
esi ;estaca do TS ou PC
(if spi (cvlp-get-endingstation spi)) ;estaca do SC
(if spi (distance tmp (list x1 y1))) ;Tc1
(if spo (vla-get-length spo)) ;Lc2
(if spo (cvlp-get-delta spo)) ;Sc2 (angulo)
esf ;estaca do ST ou CP
(if spo (cvlp-get-startingstation spo)) ;estaca do SC
(if spo (distance tmp (list x2 y2))) ;Tc2
)
pis)))))
;ultima entidade:
(setq e (last lst2))
;coordenada do PF (ponto final)
(cons (list (cvlp-get-starteasting e) (cvlp-get-startnorthing e)) pis))
é isso.. para saber o que cada método, propriedade ou constante faz ou significa, veja o seguinte arquivo: “C:Arquivos de programasAutoCAD Civil 3D 2008Helpcivilauto-reference.chm”, nele você irá encontrar o help para cada função usada neste programa. Claro, funciona como as funções VL* do visual lisp, onde vc retira o prefixo “CVL*” da função e procura no help, ex: “cvlm-PointLocation”, sem o prefixo fica só “PointLocation” e é assim que se deve procurar…
para usar o programa faça, por exemplo:
(setq file (open “c:/teste.txt” “w”) lst (get-lst-pih (vlax-ename->vla-object (car (entsel)))))
(write-line “(xPI yPI R Teta Dc Cx Cy Sentido Lc1 Sc1 EstTsPC EstSc Tc1 Lc2 Sc2 EstStPt EstCs Tc2)” file)
(foreach x lst (write-line (tostring x) file))
(close file)
(startapp “notepad.exe” “c:/teste.txt”)
Link(s) da(s) subrotina(s) usada(s):
tostring
para exportar as coordenadas, mande colocar o conteudo das variaveis x1,y1, x2,y2 junto com o restane dos dados…
civilauto-reference.chm: no 2010 ele se chama: civil_api_activex_reference.chm
apesar de no help ainda estar com o nome antigo
Olá Neyton,
Nesse trecho da sua rotina são extraidas as estacas dos 'TS ou PC' e 'ST ou CP'…
——-
esi ;estaca do TS ou PC
(if spi (cvlp-get-endingstation spi)) ;estaca do SC
esf ;estaca do ST ou CP
(if spo (cvlp-get-startingstation spo)) ;estaca do SC
——-
As coordenadas, são lidas nessa parte, mas não são extraidas para o arquivo .TXT
——-
;coordenadas do TS,PC e CP,TS
(cvlm-PointLocationex vla esi 0 0 'x1 'y1 'a)
(cvlm-PointLocationex vla esf 0 0 'x2 'y2 'b)
——-
Tem como extrair, também, as coordenadas dos 'TS,PC' e 'CP,TS'?
PS: não consegui encontrar o arquivo de ajuda 'civilauto-reference.chm' que você se refere… estou utilizando o C3D 2010 e não existe tal arquivo na pasta de ajuda… aonde posso encontrá-lo?
[]s
__
Marcus