Hoofdmenu

vla-activate

Gestart door gery, di 23 10 2018, 13:47:35

Vorige topic - Volgende topic

gery

Code
(vla-activate (vla-item (vla-get-documents (vlax-get-acad-object)) "262842.dwg"))om vanuit een geopende tekening een andere geopende tekening te activeren, werkt op de commando-regel maar niet in een script.
Iemand een idee wat er mis kan zijn?
AutoCAD 2020 - Windows 10

roy_043

Op het eerste gezicht lijkt het vreemd om deze code in een SCR-bestand te gebruiken. Kun je de inhoud van dat bestand geven?

gery

Ik ben bezig met het schrijven van een LISP routine die een script maakt die op zijn beurt één voor één de geopende tekeningen activeert en daarin een LISP routine draait, en daarbij de tekeningen geopend laat. Met de vermelde code dacht ik het één voor één activeren van de geopende tekeningen te realiseren, maar in een script blijkt dit niet te werken, wel als ik de code rechtstreeks op de commandoregel kopieer.
Een gegenereerde script kan er bijv. als volgt uitzien:
(vla-activate (vla-item (vla-get-documents (vlax-get-acad-object)) "262841.dwg"))
(load "lisp.lsp")
_.QSAVE
(vla-activate (vla-item (vla-get-documents (vlax-get-acad-object)) "262842.dwg"))
(load "lisp.lsp")
_.QSAVE
(vla-activate (vla-item (vla-get-documents (vlax-get-acad-object)) "262843.dwg"))
(load "lisp.lsp")
_.QSAVE

AutoCAD 2020 - Windows 10

EddyBeerke

Civil3d 2022, Blender 3.4 gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

gery

Bedankt voor de tips Eddy maar het is niet wat ik zoek.
AutoCAD 2020 - Windows 10

EddyBeerke

Citaat van: gery op wo 24 10 2018, 14:03:23
Ik ben bezig met het schrijven van een LISP routine die een script maakt die op zijn beurt één voor één de geopende tekeningen activeert en daarin een LISP routine draait,...
Dit is wat BaBe doet!
Je kiest dan ook voor een lisp die uitgevoerd moet worden.
De tekeningen saven kan ook.
De tekening afsluiten moet je dan zelf uit het script halen... al begrijp ik nog echt waarom je ze dan nog geopend wil laten. -> find and replace gebruiken.
Citaat van: gery op wo 24 10 2018, 14:03:23en daarbij de tekeningen geopend laat.
Civil3d 2022, Blender 3.4 gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

roy_043

#6
In BricsCAD werkt de voorgestelde code wel. Maar soms zijn in BC dingen mogelijk die in AutoCAD niet werken.

Wellicht kun je de bewerking helemaal uitvoeren zonder script met Visual Lisp functies. Dan hoef je vla-activate niet eens te gebruiken.

Andere suggesties:
1.
Gebruik in het script het commando _Open om de al geopende tekeningen te activeren (werkt niet in BC i.v.m. alert-dialoog die niet te onderdrukken lijkt).
2.
Laat het script de tekeningen één voor één sluiten (waarschijnlijk ongewenst).
3.
Heel misschien werkt zoiets:
(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "(vla-activate (vla-item (vla-get-documents (vlax-get-acad-object)) \"262841.dwg\")) ")

gery

Om één of andere reden werkt het activeren nu wel, maar het laden van de LISP in de geactiveerde tekening lukt niet. Die LISP wordt wel geladen in de brontekening nadat ik die brontekening terug manueel activeer.
Dus de loads van de LISP worden telkens in de brontekening uitgevoerd.
AutoCAD 2020 - Windows 10

roy_043

#8
In theorie kun je op het activeren van een document met een reactor reageren. Maar die code moet dan in alle tekeningen al geladen zijn. De reactor werkt permanent maar zal alleen in bepaalde situaties taken opstarten. Dit kun je bijvoorbeeld regelen met vl-bb-set/vl-bb-ref. Al met al niet gemakkelijk, maar waarschijnlijk te doen.

Problematisch is wel dat het script, dat dan nog slechts documenten activeert, niet wacht op het einde van de door de reactor gestarte taken. Er kunnen dus meerdere (te veel?) processen tegelijk gaan plaatsvinden.

Ik raad sterk aan om naar een Visual Lisp oplossing te streven.