CADsite forum

AutoCAD => Autolisp => Topic gestart door: gery op di 23 10 2018, 13:47:35

Titel: vla-activate
Bericht door: gery op di 23 10 2018, 13:47:35
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?
Titel: Re: vla-activate
Bericht door: roy_043 op wo 24 10 2018, 11:46:04
Op het eerste gezicht lijkt het vreemd om deze code in een SCR-bestand te gebruiken. Kun je de inhoud van dat bestand geven?
Titel: Re: vla-activate
Bericht door: 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, 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

Titel: Re: vla-activate
Bericht door: EddyBeerke op wo 24 10 2018, 16:55:00
Kijk eens hiernaar:
https://www.cadsite.be/smf/index.php?topic=5901.msg30935#msg30935

En we hebben hiervoor dacht ik ook nog BaBe:
https://cadsite.be/lisp/babe.php
https://www.cadsite.be/smf/index.php?topic=2811.0
Titel: Re: vla-activate
Bericht door: gery op wo 24 10 2018, 18:05:35
Bedankt voor de tips Eddy maar het is niet wat ik zoek.
Titel: Re: vla-activate
Bericht door: EddyBeerke op do 25 10 2018, 09:22:20
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.
Titel: Re: vla-activate
Bericht door: roy_043 op do 25 10 2018, 09:43:31
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\")) ")
Titel: Re: vla-activate
Bericht door: gery op do 25 10 2018, 14:13:53
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.
Titel: Re: vla-activate
Bericht door: roy_043 op do 25 10 2018, 22:08:56
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.