CADsite forum

AutoCAD => Autolisp => Topic gestart door: AdenRob op do 26 06 2014, 16:32:39

Titel: Alle layouts aanpassen (wederom OPGELOST door Roy_043)
Bericht door: AdenRob op do 26 06 2014, 16:32:39
Beste CADgebruikers,

Wij zijn bezig met een lisp om alle viewports in alle layouts de kleur ByLayer te geven.
Na het nodige speurwerk en vele testen verder hebben we een lisp geschreven die dit doet, zie bijlage (commando: VP2BL). Echter heeft deze lisp één heel groot nadeel: Alle layouts worden namelijk één-voor-één in het scherm geopend!
Aangezien we vaak tekeningen hebben met hierin vele layouts is deze lisp erg tijdrovend, ofwel te langzaam.

We hebben ook een alternatief geprobeerd met “vla-get-PaperSpace”, echter dan wordt alleen de laatst geopende paperspace aangepast. Deze lisp is wel vele malen sneller dan de eerste variant. Een voorbeeld van deze lisp staat ook in de bijlage (commando: VP2BL2).

Kan iemand ons helpen om de lisp aan te passen zodat deze doet wat we vragen maar dan op een snellere manier :?:

Alvast bedankt voor jullie hulp  :D

Met vriendelijke groet,
AdenRob
Titel: Re: Alle layouts aanpassen
Bericht door: bk2gsta op do 26 06 2014, 22:12:44
In de bijlage de aangepaste lisp.

Ik heb gebruik gemaakt van vla-get-layouts en vlax-for om door alle layouts te gaan en in elke layout alle viewports te selecteren via ssget en daarna de kleur te veranderen.

Met vriendelijke groet,
Gerard
Titel: Re: Alle layouts aanpassen
Bericht door: roy_043 op vr 27 06 2014, 13:21:39
Ik zou alle block definitions in de blocks collection nalopen. Alle blocks waarvoor de IsLayout eigenschap TRUE is moeten vervolgens doorlopen worden op zoek naar Viewport objecten.

Je zou de bijlage uit dit bericht als basis kunnen gebruiken:
http://www.cadsite.be/smf/index.php?topic=5333.msg30708#msg30708
Titel: Re: Alle layouts aanpassen
Bericht door: AdenRob op vr 27 06 2014, 14:32:08
Allereerst bedankt voor jullie snelle reacties  :vreegoe:

@bk2gsta: Bij het uitvoeren van de door jou bijgevoegde Lisp krijgen we een foutmelding; error: bad argument type: lselsetp nil
Dit geeft aan dat de selectie nil is. Maar in onze layouts zitten wel degelijk viewports...
We begrijpen door jouw lisp wel hoe we layouts kunnen benaderen. Echter doorzoekt de SSGET functie nu alleen de opgegeven layout of wordt de hele tekening doorzocht op een viewport in de opgegeven layout naam? Ofwel; wordt de SSGET functie toegepast binnen de vlax-functie of is de vlax functie enkel voor het verkrijgen van de layout namen?

@Roy_043: Helaas gaat de door jou gemaakte lisp onze pet (nog steeds) ver te boven! Maar toch bedankt voor je tip! We gebruiken je lisp nog dagelijks met heel veel plezier! Alleen veroorzaakt deze ook een klein probleempje. Namelijk de objecten in paperspace worden ook allemaal kleur ByBlock...
Naar aanleiding van je tip hebben we een extra regel opgenomen: (= (vla-get-islayout a) :vlax-true). Helaas worden hiermee nog steeds paperspace objecten verbouwd. Iets doen we dus niet goed, maar wat?  :?

Dit is het onderdeel van de lisp waar deze check in hebben toegevoegd:
(defun GetAllGraphicObjects ()
  (apply
    'append
    (mapcar
      'KGA_Block_ObjectListNested
      (vl-remove-if
        '(lambda (a)
          (or
            (= (vla-get-isxref a) :vlax-true)
    (= (vla-get-islayout a) :vlax-true);<-------------------
            (wcmatch (strcase (vla-get-name a)) "`*D*,`*T*")
          )
        )
        (KGA_Conv_Collection_To_List
          (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) ; De collection van alle blocks in de dwg.
        )
      )
    )
  )
)



We hebben in onze eerste post aangegeven dat we alle viewports kleur ByLayer willen maken. Bij nader inzien mogen alle objecten in de layouts kleur bylayer gemaakt worden. Uiteraard willen we hier wel enkele uitzonderingen op maken, maar dit denken we zelf te kunnen  :wink:

Bedankt voor het delen van jullie kennis!
Titel: Re: Alle layouts aanpassen
Bericht door: roy_043 op di 01 07 2014, 21:41:48
Citaat van: AdenRob op vr 27 06 2014, 14:32:08
Helaas worden hiermee nog steeds paperspace objecten verbouwd. Iets doen we dus niet goed, maar wat?  :?
Volgens mij klopt deze opmerking niet. Als ik jullie wijziging doorvoer dan worden PS objecten niet langer aangepast. Het enige probleem dat ik kan vaststellen is dat ook MS objecten niet meer worden aangepast. Het Modelspace block is namelijk ook een layout.
Ik zal mijn nieuwe versie van 'Objects_ChangeLineweightAndMore' hier toevoegen:
http://www.cadsite.be/smf/index.php?topic=5333.0
Titel: Re: Alle layouts aanpassen
Bericht door: AdenRob op wo 02 07 2014, 15:54:33
Dag Roy,

Het klopt inderdaad dat PS-objecten met de door ons aangepaste lisp worden uitgesloten. Er is waarschijnlijk iets niet helemaal goed gegaan met testen.

Bedankt voor het aanpassen van de Lisp!
Wij hebben de door jou aangepaste lisp uitgebreid getest, deze sluit inderdaad de paperspace objecten uit.  :vreegoe:

Alleen lopen we nog tegen één probleem aan. Voorheen wijzigde jouw lisp ook alle objecten welke zich "los" is modelspace bevinden. Dit werkt helaas niet meer in jouw laatst geposte lisp... Is het mogelijk om dit weer terug toe te voegen aan jouw lisp?

We hebben ter verduidelijking een tekening toegevoegd. Als je hierop jouw laatst gewijzigde lisp uitvoert dan zul je zien dat de losse objecten (de twee linker polylines; rood en geel) niet kleur ByBlock gemaakt worden. Voorheen was de gehele modelspace na het uitvoeren van je lisp kleur ByBlock met uitzondering van de colorskiplist kleuren.

Alvast bedankt voor het meedenken!
Titel: Re: Alle layouts aanpassen
Bericht door: roy_043 op wo 02 07 2014, 22:55:35
Citaat van: AdenRob op wo 02 07 2014, 15:54:33
Alleen lopen we nog tegen één probleem aan. Voorheen wijzigde jouw lisp ook alle objecten welke zich "los" is modelspace bevinden. Dit werkt helaas niet meer in jouw laatst geposte lisp...
Zie: http://www.cadsite.be/smf/index.php?topic=5333.msg31366#msg31366
Titel: Re: Alle layouts aanpassen
Bericht door: AdenRob op do 03 07 2014, 12:32:49
Beste Roy,

Helemaal geweldig! De lisp werkt perfect!  :ole:
Onze hartelijke dank hiervoor  :pintje:


Groeten,
AdenRob