FastFiber

lagen bevriezen in viewports (opgelost)

Gestart door marcelmaas, di 09 02 2010, 16:08:57

Vorige topic - Volgende topic

marcelmaas

Hi,

Ik wil een routine maken die verschillende lagen in de actieve viewport bevriest.
Heeft iemand een idee hoe ik hiermee begin?

Alvast bedankt voor de moeite.!!!

groeten Marcel..

JMD

Dag Mrcel,

je zult denk ik even beter moeten omschrijven wat je wilt...
Gaat het altijd om dezelfde lagen, enz.

Groet JMD

cetacad

#2
Indien je altijd dezelfde lagen uit wilt zetten of lagen die beginnen met dezelfde letters kun je het onderstaande toepassen.
Ik heb hier een voorbeeld gegeven van een laagnaam waarvan de eerste 3 letters DIM of de eerste letters 5 TEKST zijn.


(DEFUN C:LAYER-VP-FREEZE ()

(princ "\nSelecteer te wijzigen viewport ......: ")
(setq L (car(entsel)))
(setq laag (tblnext "layer" T))

(while (/= laag nil)
(setq laagnaam (cdr (assoc 2 laag)))


(if (OR
(= (substr (strcase laagnaam) 1 3) "DIM")
(= (substr (strcase laagnaam) 1 5) "TEKST")
)(progn

(COMMAND "vplayer" "f" laagnaam "s" L "" "")
);progn
);if

(setq laag (tblnext "layer"))
);while

);defun

roy_043

@cetacad het is natuurlijk geen vba... Maar als je het toch in lisp doet: dit werkt volgens mij ook qua commando:
... (COMMAND "vplayer" "f" "dim*,tekst*" "s" L "" "") ...

marcelmaas

Het zijn inderdaad elke keer wel dezelfde lagen die ik wil uitzetten in de viewport.
Alleen hebben we 2 soorten layout tabladen, en in beide moeten er verschillende lagen aan en uit staan.
Dus met deze lisp kan ik misschien al wel een eind komen.
Ik had het eigenlijk in VBA willen doen, maar ik zal eens kijken of dit werkt.

Alvast bedankt.

groeten Marcel..

marcelmaas

Iets gaat er nog niet goed, ik krijg deze melding in mijn command regel:

Select objects: Enter an option
[?/Color/Ltype/LWeight/Freeze/Thaw/Reset/Newfrz/Vpvisdflt]:
Command: nil

Doe ik iets niet goed, of ligt het aan de code?

groeten Marcel..

roy_043

@marcelmaas: Om verwarring te voorkomen: post jouw code.

marcelmaas

Okay hier is mijn code:

(DEFUN C:Layer-VP-Freeze ()

(princ "\nSelecteer te wijzigen viewport ......: ")
(setq L (car(entsel)))
(setq laag (tblnext "layer" T))

(while (/= laag nil)
(setq laagnaam (cdr (assoc 2 laag)))


(if (OR
(= (substr (strcase laagnaam) 1 3) "KOP")
(= (substr (strcase laagnaam) 1 3) "AAN")
)(progn

   (COMMAND "vplayer" "f" laagnaam "s" L "" "")
);progn
);if

(setq laag (tblnext "layer"))
);while

);defun

roy_043

#8
OK: je gebruikt dus de code van cetacad. Bij mij werkt deze code (net als bij cetacad dus). Het kan zijn dat de volgorde van de prompts het probleem veroorzaakt. Als ik het commando VPLAYER gebruik dan zijn dit de prompts:
: vplayer
List/Freeze/Thaw/Reset/New frozen layers/Default visibility settings : f
Select the layer(s) to freeze: dezeLaagBestaatNiet
All/Select/<Current>: s
Select a viewport :
Entities in set: 1
Select a viewport :
List/Freeze/Thaw/Reset/New frozen layers/Default visibility settings :

Dit komt overeen met de lisp-code.

Wat zijn bij jouw de prompts voor VPLAYER?

marcelmaas

Mijn prompts zijn:

?/color/Ltype/Lweight/Freeze/Thaw/Reset/Newfrz/Vpvisdflt

groeten Marcel..

roy_043

Ik bedoel dus: als je "handmatig" het commando VPLAYER gebruikt wat zijn dan de opeenvolgende prompts. Zie de 8 gele regels in mijn vorige post.

marcelmaas

Ik heb het probleem al gevonden, de lagen bestonden niet, omdat ik de verkeerde tekening geopend had naardat mijn autocad was vastgelopen.
Nu werkt het zoals jij zij.

Is het misschien mogelijk om niet een viewport te hoeven aanklikken maar dat het gewoon werkt voor de layout tab die actief is?

Misschien te ingewikkeld, maar is voor ons wel makkelijker.

In ieder geval alvast bedankt voor deze hulp.

Marcel..

roy_043

Vreemd, het programma loopt volgens mij niet vast op niet bestaande lagen. Dat heeft cetacad namelijk goed geregeld! :vreegoe:
Hier een aangepaste versie van zijn programma (Layer-VP-Freeze) en hoe ik het zou doen (ALT-VP-F). Beide programmaatjes selecteren nu alle viewports op de actieve tab.

(defun c:Layer-VP-Freeze ( / ss laag laagnaam)
  (setvar "cmdecho" 0)
  (setq ss (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 (getvar "ctab")))))
  (while (setq laag (tblnext "layer" (not laag))) ; bij eerste keer is (not laag) gelijk aan T
    (setq laagnaam (cdr (assoc 2 laag)))
    (if
      (or
        (= (substr (strcase laagnaam) 1 3) "KOP")
        (= (substr (strcase laagnaam) 1 3) "AAN")
      )
      (command "_.vplayer" "_freeze" laagnaam "_select" ss "" "")
    )
  )
)

(defun c:Alt-VP-F ()
  (setvar "cmdecho" 0)
  (command "_.vplayer" "_freeze" "kop*,aan*" "_select" (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 (getvar "ctab")))) "" "")
)

marcelmaas

Okay nu hoef ik inderdaad geen viewport te selecteren, dat is fijner!
Maar op deze manier bevriest hij eerst alle lagen geloof ik, waardoor ik ook mijn xref's en nog veel meer kwijt ben.

Wat eigenlijk fijn zou zijn is, dat eerst alle lagen ontdooit worden, en dat ik daarna de code die we nu hebben kan gebruiken om de lagen te bevriezen die ik niet wil zien.
Zo kan ik dan een paar apparte lisp routines maken voor onze verschillende tabbladen.
Dat zou helemaal super zijn.!!!

Groeten Marcel..

roy_043

Citaat van: marcelmaas op di 09 02 2010, 22:53:20Maar op deze manier bevriest hij eerst alle lagen geloof ik, waardoor ik ook mijn xref's en nog veel meer kwijt ben.
Nee, dat gebeurt volgens mij niet. Kan het zijn dat de xrefs op een laag kop* of aan* staan? Probeer het probleem beter te analyseren en beter te omschrijven. Dus niet "ik geloof ..."
Aangepaste code:(defun c:Layer-VP-Freeze ( / ss laag laagnaam)
  (setvar "cmdecho" 0)
  (setq ss (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 (getvar "ctab")))))
  (command "_.vplayer" "_thaw" "*" "_select" ss "" "")
  (while (setq laag (tblnext "layer" (not laag))) ; bij eerste keer is (not laag) gelijk aan T
    (setq laagnaam (cdr (assoc 2 laag)))
    (if
      (or
        (= (substr (strcase laagnaam) 1 3) "KOP")
        (= (substr (strcase laagnaam) 1 3) "AAN")
      )
      (command "_.vplayer" "_freeze" laagnaam "_select" ss "" "")
    )
  )
)

(defun c:Alt-VP-F ()
  (setvar "cmdecho" 0)
  (command
    "_.vplayer"
    "_thaw" "*" "_select" (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 (getvar "ctab")))) ""
    "_freeze" "kop*,aan*" "_select" "_previous" ""
    ""
  )
)