pv2allalign

Um programa para o civil 3d, e usando algumas das funções da TLB dele!! este programa cria profileviews dos alinhamentos selecionados, util quando se está criando “corridors” com varios alinhamentos auxiliares numa interseção, o como foi um caso em que estou trabalhando, uma rua com 4 cruzamentos, cada um com 4 alinhamentos auxiliares, para criar as concordâncias… ou seja, é muita coisa pra criar profileview um a um, ainda mais que serão temporário..

mais…

;cria profileviews de alinhamentos selecionados
(defun c:pv2allalign (/ ss ent vla pt d llayer lstyle lbandset dcl)
(
tbn:error-init nil)
(
if (setq ss (ssget ((0 . “AECC_ALIGNMENT”))))
(
if (setq pt (getpoint “\nIndique a posição do primeiro Profile View”))
(
progn
(setq lstyle (prof2allalign_getnames (cvlp-get-ProfileViewStyles aec-adoc))
lbandset (prof2allalign_getnames (cvlp-get-ProfileViewBandStyleSets aec-adoc))
llayer (prof2allalign_getnames (vla-get-layers aec-adoc))
llayer (vl-remove nil (mapcar (lambda (x) (if (not (vl-string-search “|” x)) x)) llayer))
dcl (load_dialog “f:/autocad/tbn2/lisps/pv2allalign.dcl”))

(new_dialog “pv2allalign” dcl)

(multi_set_action_tile
(“style” “layer” “bandset” “prefixo” “separa”)
(
list (list pv2allalign:style lstyle “style”)
(
list pv2allalign:layer llayer “layer”)
(
list pv2allalign:bandset lbandset “bandset”)
pv2allalign:prefixo
pv2allalign:separa
)
“(pv2allalign_actions $key $value)”)

(pv2allalign_mode_tiles)

(if (= 1 (start_dialog))
(
repeat (sslength ss)
(
setq ent (ssname ss 0)
vla (vlax-ename->vla-object ent)
prof (cvlm-add
(cvlp-get-profileviews vla)
(
strcat (if pv2allalign:prefixo pv2allalign:prefixo “”) (cvlp-get-name vla))
pv2allalign:layer
(vlax-3d-point pt)
pv2allalign:style
pv2allalign:bandset
)
d (get-bounding-box prof)
pt (list (+ ( (caadr d) (caar d)) pv2allalign:separa (car pt))
(
cadr pt)))
(
ssdel ent ss)))
(
unload_dialog dcl)
)))
(
tbn:error-restore))

(defun pv2allalign_actions (key val)
(
if (= key “prefixo”)
(
setq pv2allalign:prefixo val)
(
set (read (strcat “pv2allalign:” key))
(
nth (atoi val) (eval (read (strcat “l” key))))))
(
pv2allalign_mode_tiles))

(defun pv2allalign_actions (key val)
(
if (= key “prefixo”)
(
setq pv2allalign:prefixo val)
(
if (= key “separa”)
(
setq pv2allalign:separa (atof val))
(
set (read (strcat “pv2allalign:” key))
(
nth (atoi val) (eval (read (strcat “l” key)))))))
(
pv2allalign_mode_tiles))

(defun pv2allalign_mode_tiles nil
(mode_tile “accept” (if (and pv2allalign:layer
pv2allalign:style
pv2allalign:bandset
pv2allalign:separa
) 0 1)))
;variaveis globais
(setq
pv2allalign:layer “PERFIL”
pv2allalign:style “PARALLELA”
pv2allalign “Standard”
pv2allalign:prefixo “PV-“
pv2allalign:separa 20)

Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, aec-adoc, multi_set_action_tile, get-bounding-box, tbn:error-restore

tem uma outra bem parecida que serve para criar os “profile from surface” para estes alinhamentos, outra hora eu posto

3 comentários em “pv2allalign”

  1. Valeu a dica!
    Acabei achando a solução para o que eu queria de uma outra maneira via
    (vlax-curve-getPointAtDist EIXO ESTACA)
    assim eu consegui a coordenada da estaca no eixo e pude dar um ZOOM no local certo…

    Obrigado!

  2. Olá Neyton,
    você tem alguma rotina em lisp que localize uma estaca clicando no eixo e informando o número dela?”
    Já andei dando uma olhada pelo blog mas não vi nada parecido…

    Ex: Eu gostaria de localizar a estaca 330+19,75 (num trecho de 3000 estacas) eu clicaria no eixo e digitaria o número da estaca e rotina daria um ZOOM no ponto exato da estaca…

    vc tem algum outro site de lisp que possa me indicar? (cadalyst, afralisp…)

    []s

Deixe um comentário

Carrinho de compras
Rolar para cima