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:

  1. 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

    ResponderExcluir
  2. Anônimo5/3/08 08:40

    experimente:
    zoom <enter>
    c <enter>
    'so <enter>

    ResponderExcluir
  3. 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!

    ResponderExcluir