Civil 3d - Perfis e estilos

Você criou trocentos perfis, alguns de terreno, outros são os grades e outros são os superimposeds.... certo, mas os estilos estão todos bagunçados? que tal padronizar isso? cada tipo de perfil num estilo? veja a lisp abaixo:
ver a bendita...
salve o dcl:

setperfstyle :dialog {label = "Ajustar Estilos dos perfis";
:
popup_list {label = "Terreno" ; key = "terreno"; }
:popup_list {label = "Grade" ; key = "grade"; }
:popup_list {label = "Super Imposed" ; key = "superimposed"; }
:text {label="Powered by Neyton®";}
:row{
  

  :button {key = "cncl"; is_cancel = true; label = "melhor dêxa"; }
  :button {key = "ok"; is_default = true; label = "é muda aí!!"; }}
}


salve a lisp:


(setq setperfstyle:Terreno "Terreno"
      setperfstyle:grade "Grade"
      setperfstyle:superimposed "Super")

       
(
defun c:setperfstyle (/ ss ent vla sty acao modes terreno grade superimposed lsty dcl)
  (
tbn:error-init nil)
  (
if (setq ss (ssget '((0 . "AECC_PROFILE"))))
    (
progn
      (vlax-for tmp  (cvlp-get-LandProfileStyles aec-adoc)
        (
setq sty (cons (list (cvlp-get-name tmp)
                              (
vla-get-layer (cvlp-get-LineDisplayStyle2d  tmp)))
                        sty)))
      (
setq dcl   (load_dialog "setperfstyle.dcl")
            lsty  (mapcar 'car sty)
            modes (lambda nil (mode_tile "ok" (if (and terreno grade superimposed) 0 1)))
            acao  (lambda (key val)
                    (
set (read key) (nth (atoi val) lsty))
                    (
modes)))
      (
new_dialog "setperfstyle" dcl )
      (
multi_set_action_tile
        '("terreno""grade" "superimposed")
        (
list (list setperfstyle:Terreno lsty "terreno")
              (
list setperfstyle:grade lsty "grade")
              (
list setperfstyle:superimposed lsty "superimposed"))
        "(acao $key $value)")
      (
if (= 1 (start_dialog))
        (
progn
          (setq setperfstyle:Terreno Terreno
                setperfstyle:Grade Grade
                setperfstyle:Superimposed Superimposed
)
          (
repeat (if ss (sslength ss) 0)
            (
setq ent (ssname ss 0)
                  vla (vlax-ename->vla-object ent))
            (
ssdel ent ss)
            (
cvlp-put-style vla (setq tmp
                                       (nth
                                         (vl-position (cvlp-get-type vla)
                                           (
list cvlc-aeccExistingGround
                                                 cvlc-aeccFinishedGround
                                                 cvlc-aeccSuperimposed
))
                                         (
list Terreno Grade Superimposed))))
            (
vla-put-layer vla (cadr (assoc tmp sty))))))
      (
unload_dialog dcl)))
  (
tbn:error-restore)
  )



Link(s) da(s) subrotina(s) usada(s):
Inivars (funções cvl*)
tbn:error-init, multi_set_action_tile, tbn:error-restore

Para usar, digite o nome da rotina na linha de comando após carregar ela. Ah, claro, só irá funcionar para os perfis efetivamente desenhados nas profileviews, e sim, é preciso copiar as subrotinas também.

4 comentários:

  1. Neyton, boa noite!

    Esta rotina serve apenas para o Civil 3D ou posso usá-la no CAD 2007 ou Map 3D 2007?
    Show de bola!!
    Parabéns!

    ResponderExcluir
  2. só pro c3d, veja as funções com prefixo CVL*, elas são do civil 3d, talvez o land possa usar, mas não tenho certeza

    ResponderExcluir
  3. Tudo bem?

    Error: no function definition: CVLP-GET-LINEDISPLAYSTYLE2D
    Command: *Cancel*

    porque o erro ao rodar no civil 2009?

    ResponderExcluir
  4. porque voce nao leu o post
    http://tbn2.blogspot.com/2007/11/inivars.html

    é necesario carregar uma lisp que está nele para esta funcionar

    ResponderExcluir