Novo modelo



Vou "estar experimentando" um novo modelo do blogger e também "tentando monetizar" um pouco esse negócio, por isso, não sejam sovinas e cliquem algum link daqui depois de ver a sua rotina, ok? Não sei se exagerei ou não, mas em comparação com muitos sites por ai, até que não está tão propagandeado, hehehehe
e quem sabe estar procurando um jeito de estar parando de estar falando desta maneira

doubleclick

Uma dica legal pra trabalhar com mais eficiência no civil 3d: as doubleclik. Na verdade é um recurso que já existe no autocad a um bom tempo, mas qua não damos muita importância. Imagine você clicar duas vezes num alinhamento, perfil, modelo de estrada ou qualquer coisa do civil 3d e ele inicia o comando relevante àquela entidade; Um alinhamento por exemplo a edição mais comum é a de alterar a geometria. Se você não gosta de ter que ligar o toolspace o tempo todo ou, mantêlo ligado, pois ocupa espaço na tela (tenha 2 monitores!!!), pode se beneficiar desse recurso, então vamos lá, pra usar isso, no civil 3d, digite CUI, aparecerá a janela do "Customize User Interface", nela, no quadro superior esquerdo, localize "Double Click Actions", como na figura. Clique com o botão direito do mouse sobre ele e escolha "New Double Click Action". No quadro a direita, no campo "Name" coloque o nome da ação e no campo "Object Name" o tipo de entidade. Tá, mas como saber que nomes colocar ali? Faça assim: na linha de comando digite:



(cdr (assoc 0 (entget (car (entsel "\nSelecione algo")))))






é isso mesmo, um lisp, ao selecionar um Alignment, na linha de comando aparecerá:



"AECC_ALIGNMENT"



coloque isso nos campos "Name" e Object Name" citados acima.

Agora, vamos criar os comandos que serão executados:


No quadro inferior esquerdo (o "Command List"), clique o botão "Create a new command" e no quadro da direita (o "Properties" ), preencha o campo "Name" com o comando que você quer e o campo "Macro" com o mesmo nome precedido do prefixo "^C^C_", como na figura ao lado.



Agora, no quadro "Command List" aparecerá o seu novo comando, "arraste-o" com o mouse para cima do nome da doubleclick que voce criou, deverá ficar como na figura abaixo:

Pronto, faça o mesmo para as demais entidades que você quer ter essa funcionalidade, eu estou usando as que aparecem na figura, é bem melhor que abrir o toolspace toda hora, ou usar aquele menu do botão direito do mouse pra tudo...

VPFREEZE

Então, pra variar um pouco, um´programa para se trabalhar com viewports. è o seguinte, você cria a viewport, congela alguns layers nela com o vpfreeze e tal... depois inventa que precisa o mesmo "estado" dos layers numa outra viewport, ou em "trocentas" delas em outros layouts, bem, como saber quais layers estão congelados? simples, basta pegar os dxf 330 da ELIST da viewport, hehehe... complicou né, certo... faz assim:
mais...
(defun c:svpstate (/ view)
  (
tbn:error-init nil)
  (
if (setq view (ssget ":S" '((0 . "VIEWPORT"))))
    (
setq svpstate:frzc (vl-remove nil
                          (mapcar '(lambda (l)
                                     (
if (= 331 (car l))
                                       (
dxf 2 (cdr l))))
                                  (
entget (ssname view 0))))))
  (
tbn:error-restore))


(
defun c:lvpstate (/ ss)
  (
tbn:error-init nil)
  (
if svpstate:frzc
    (progn
      (prompt "\nSeleciona as viewports onde aplicar o layer_state")
      (
if (setq ss (ssget '((0 . "VIEWPORT"))))
    (
progn
          (vla-put-mspace thisdrawing :vlax-true)
      (
repeat (sslength ss)
        (
setq ent (ssname ss 0))
        (
vla-put-ActivePViewport thisdrawing (vlax-ename->vla-object ent))
        (
command "vplayer" "thaw" "*" "" ""
             "vplayer" "freeze"

             (vl-string-right-trim ","
                       (apply 'strcat (mapcar '(lambda (x) (strcat x ",")) svpstate:frzc)) ) "" "")
        (
ssdel ent ss))))))
  (
tbn:error-restore))


Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, dxf, tbn:error-restore, thisdrawing

É pra ser usado assim: crie a viewport da maneira que lhe convém, use o comando svpstate, ele irá criar uma lista dos layers congelados nesta viewport. Depois, selecione as viewports onde ele irá congelar os mesmos layers e use o comando lvpstate, pronto...
Obs: o primeiro comando cria uma variável global chamada "svpstate:frzc", se você recuperar o seu conteúdo, verá que é uma lista com os nomes dos layers