CADsite forum

AutoCAD => Autolisp => Topic gestart door: Hepa op di 24 11 2015, 21:10:55

Titel: Freeze layer in gekozen viewport
Bericht door: Hepa op di 24 11 2015, 21:10:55
Beste,

Omdat ik een leek ben met het schrijven van lisp had ik graag wat hulp nodig van iemand die het toegevoegde lisp will aanpassen.
Deze lisp is opgebouwd dat hij van te voren een ingestelde layer moet gaan vriezen in een gekozen viewport die bepaald wordt door het gebruiker.

Omdat ik soms meerdere layers van bepaalde viewport moet bevriezen is het handiger als deze lisp ook eerst vraagt aan de gebruiker welke layer bevriesd moet worden en vervolg een bepaalde viewport (tab) naam  vraagt om in tevullen.

Op deze manier moet ik niet elke keer deze voor ingestelde layer handmatig aanpassen.
Titel: Re: Freeze layer in gekozen viewport
Bericht door: bart op wo 25 11 2015, 08:57:14
Alles wat je beschrijft kan vanuit het standaard commando vplayer
is dit commando jouw bekend?
Titel: Re: Freeze layer in gekozen viewport
Bericht door: Bart Dheere op wo 25 11 2015, 11:11:32
LAYERSTATE is misschien ook een mogelijke optie.
Configuratie van on/off thaw/freeze,... enz juist zetten en save.

Iets wat ik frequent gebruik van maak, bijgevolg ook mijn pgp-bestand aangepast met LM *LAYERSTATE

Gegroet
Titel: Re: Freeze layer in gekozen viewport
Bericht door: Hepa op do 26 11 2015, 21:03:45
Beste Bart,

Als eerst dank voor jouw reactie. Maar met de vplayer commando moet ik de hele naam van het layer invullen
en ik moet meer handelingen uitvoeren in plaats van alleen een knopje te bedienen en twee handelingen te hoeven uit te voeren. Vandaar dat ik het graag gebruikt wil maken van lisp routine.
Titel: Re: Freeze layer in gekozen viewport
Bericht door: Reimer op vr 27 11 2015, 10:01:41
Voor mezelf heb ik een lisp-routine gemaakt die een opgegeven layerstate toepast op viewports die op een laag staan waarin de naam van de layerstate is verwerkt.
Als ik bijvoorbeeld een layerstate "Situatie1" heb gemaakt dan kan ik deze laten toepassen op alle viewports die op de laag "vplas-situatie1" staan.
Dit is niet precies wat je gevraagd hebt maar misschien kun je er iets mee.

Reimer

;;   ___       ____
;;  ___     __/ RR \__
;;   ___   '-(o)--(o)-'
;;
;;VPLAS Pas een opgeslagen Layerstate toe in alle viewports die op een laag
;; staan met dezelfde naam (met de prefix 'vplas-' en niet hoofdlettergevoelig).
;;Voorbeeld: Layerstate: Situatie1
;; Laagnaam:   vplas-situatie1
;;Door: Reimer
;;
(defun c:VPLAS (/ LASNAME ALLVP AANTALVP CNT CNTVP VP VPLAY VPLAYNAME CLAY)
  (setq LASNAME (strcase (getstring "\nGeef de layerstate naam op: ") T))
  (if (layerstate-has LASNAME) ;doorgaan als de layerstate-naam bestaat
    (progn
      (setq ALLVP (ssget "x" '((0 . "VIEWPORT")))) ;selecteer alle viewports in de dwg
      (setq AANTALVP (sslength ALLVP)) ;bepaal het aantal viewports
      (setq CNT 0) ;zet de teller op 0
      (setq CNTVP 0) ;zet de viewport-teller op 0
      (while (< CNT AANTALVP) ;doorgaan zolang de teller kleiner is dan het aantal viewports
        (setq VP (ssname ALLVP CNT)) ;pak het n-de element uit de lijst van viewports (n = CNT)
        (setq VPLAY (cdr (assoc 8 (entget VP)))) ;bepaal de laag waarop de viewport staat
        (setq VPLAYNAME (strcase (substr VPLAY 7 (- (strlen VPLAY) 6)) T)) ;neem een deel van de laagnaam, vanaf het 7e karakter tot het einde en zet deze in hoofdletters.
        (if (= VPLAYNAME LASNAME) ;doorgaan als de laagnaam gelijk is aan de naam van de opgegeven layerstate.
          (progn
            (setq CLAY (getvar "CLAYER")) ;vastleggen wat de actieve laag is
            (setq CNTVP (1+ CNTVP)) ;de viewport-teller met 1 ophogen
            (layerstate-restore LASNAME VP) ;pas de opgegeven layerstate toe (let op: hierbij wordt de actieve laag aangepast)
            (setvar "CLAYER" CLAY) ;stel de actieve laag in op de vastgelegde waarde
          );_progn
        );_if
        (setq CNT (1+ cnt)) ;de teller met 1 ophogen
      );_while
     
      (princ (strcat "Er zijn  " (rtos CNTVP 2 0) "  viewports bijgewerkt.")) ;melding
    );_progn
  (princ "De opgegeven layerstate bestaat niet.")
  );_if
(princ)
)
Titel: Re: Freeze layer in gekozen viewport
Bericht door: bart op vr 27 11 2015, 15:59:48
Citaat van: Hepa op do 26 11 2015, 21:03:45

Maar met de vplayer commando moet ik de hele naam van het layer invullen


Als je de juiste vieport actief hebt kan je ook op enter drukken en daarna gewoon de 1 of meerder objecten waarvan je de laag wilt bevriezen selecteren.
Dan hoeft je helemaal niets te typen