CADsite forum

AutoCAD => Autolisp => Topic gestart door: Reimer op ma 12 01 2009, 10:28:28

Titel: Plotternaam opvragen tbv controle op None
Bericht door: Reimer op ma 12 01 2009, 10:28:28
Ik wil graag weten of de plotternaam niet op none staat. Is er een manier om via lisp de plotternaam op te vragen?

Reimer.
Titel: Re: Plotternaam opvragen tbv controle op None
Bericht door: HofCAD op ma 12 01 2009, 11:58:23
Citaat van: Reimer op ma 12 01 2009, 10:28:28
Ik wil graag weten of de plotternaam niet op none staat. Is er een manier om via lisp de plotternaam op te vragen?

Reimer.


Beste Reimer,

Bedoel je zoiets:


(defun c:test( / appObj docObj layObj)
(vl-load-com)
(setq appObj (vlax-get-acad-object)
docObj (vla-get-ActiveDocument appObj)
layObj (vla-get-ActiveLayout docObj)
)
;(princ (strcat "\n" (vlax-get-property layObj 'ConfigName)))
(alert (strcat "\nDe printer is:" (vlax-get-property layObj 'ConfigName)))
)


Met vriendelijke groet, HofCAD CSI
Titel: Re: Plotternaam opvragen tbv controle op None
Bericht door: Reimer op do 15 01 2009, 10:26:24
Dit werkt prima Hofcad, bedankt.
Er is nu echter een nieuw probleem. In mijn plotscherm staat bij de plotter name: None. Dit klopt want er is een plotter ingesteld die ik niet heb. Echter, via -plot of via de lisproutine van Hofcad krijg ik de oorspronkelijke plotternaam en niet None.

Ik kan mijn vraag dus beter anders formuleren:
Hoe kan ik controleren of de ingestelde plotter bij mij bestaat?

Een oplossing zou zijn om een lijst met aanwezige plotters op te vragen en deze te vergelijken met de ingestelde plotter. Iemand enig idee hoe dit moet? Of andere suggesties?

Groeten,
Reimer.

(Ik merk dat het erg leuk is om zo te puzzelen met Lisp. Helaas komt er bijna bij elke oplossing een nieuw probleem bij :))
Titel: Re: Plotternaam opvragen tbv controle op None
Bericht door: HofCAD op do 15 01 2009, 18:08:47
Citaat van: Reimer op do 15 01 2009, 10:26:24
Dit werkt prima Hofcad, bedankt.
Er is nu echter een nieuw probleem. In mijn plotscherm staat bij de plotter name: None. Dit klopt want er is een plotter ingesteld die ik niet heb. Echter, via -plot of via de lisproutine van Hofcad krijg ik de oorspronkelijke plotternaam en niet None.

Ik kan mijn vraag dus beter anders formuleren:
Hoe kan ik controleren of de ingestelde plotter bij mij bestaat?

Een oplossing zou zijn om een lijst met aanwezige plotters op te vragen en deze te vergelijken met de ingestelde plotter. Iemand enig idee hoe dit moet? Of andere suggesties?

Groeten,
Reimer.

(Ik merk dat het erg leuk is om zo te puzzelen met Lisp. Helaas komt er bijna bij elke oplossing een nieuw probleem bij :))

Beste Reimer,

Bedoel je zo iets:

(defun C:Test2 ( / ActLay)
  (vl-load-com)
  (setq ActLay (vla-get-ActiveLayout
(vla-get-activedocument
   (vlax-get-acad-object)
)
       )
  )
  (vla-RefreshPlotDeviceInfo ActLay)
  (vlax-safearray->list
    (vlax-variant-value
      (vla-GetPlotDeviceNames
ActLay
      )
    )
  )
)
en
(defun Plotters (Plotter / @member+ PlotterLst ActLay)
  (defun @member+ (x lst /)
    (if (vl-member-if
  '(lambda (y)
     (wcmatch x y)
   )
  lst
)
      x
    )
  )
  (vl-load-com)
  (setq ActLay (vla-get-ActiveLayout
(vla-get-activedocument
   (vlax-get-acad-object)
)
       )
  )
  (vla-RefreshPlotDeviceInfo ActLay)
  (setq PlotterLst
(vlax-safearray->list
   (vlax-variant-value
     (vla-GetPlotDeviceNames
       ActLay
     )
   )
)
  )
 (member+ Plotter PlotterLst)
)
(defun C:Test3 ( / Plotter)
  (setq Plotter "None")
  (if (Plotters Plotter)
    (alert (strcat "\nDe printer " Plotter " bestaat."))
    (alert (strcat "\nDe printer " Plotter " bestaat niet."))
  )
)

en voor te veranderen
(defun ChgPlotter (Plotter)
  (vl-load-com)
  (vla-put-ConfigName
    (vla-get-ActiveLayout
      (vla-get-activedocument
(vlax-get-acad-object)
      )
    )
    Plotter
  )
)
(defun c:Test4 ( / Plotter)
  (setq Plotter "None")
  (ChgPlotter Plotter)
)

Programma Test2 geeft je een lijst met bestaande plotters.
In programma Test3 bij de variabele Plotter de plotternaam "None" vervangen door
een bestaande plotternaam uit de lijst van programma Test2.
Ook in programma Test4 bij de variabele Plotter de plotternaam "None" vervangen door
een bestaande plotternaam uit de lijst van programma Test2.

Met vriendelijke groet, HofCAD CSI

PS Je zegt dat mijn programma Test niet de waarde geeft van het plotscherm.
Misschien moet je eerst verversen met


(vl-load-com)(vla-RefreshPlotDeviceInfo (vla-get-ActiveLayout (vla-get-activedocument (vlax-get-acad-object))))


voordat je het programma Test laat lopen.
Titel: Re: Plotternaam opvragen tbv controle op None
Bericht door: EddyBeerke op do 04 03 2010, 12:31:29
Ik wil gebruik maken van jou lisp om in een lijst de plotters te zetten en dan een keuze te maken,
maar bij mij geeft het rode een fout!


Citaat van: HofCAD op do 15 01 2009, 18:08:47

(defun Plotters (Plotter / @member+ PlotterLst ActLay)
...
  (vla-RefreshPlotDeviceInfo ActLay)
  (setq PlotterLst
    (vlax-safearray->list
      (vlax-variant-value
        (vla-GetPlotDeviceNames
          ActLay
        )
      )
    )
  )
 (member+ Plotter PlotterLst)
)

...
Titel: Re:Plotternaam opvragen tbv controle op None
Bericht door: cetacad op vr 05 03 2010, 11:17:16
Ik heb test2 en test3 van HofCAD gebruikt om de bijgevoegde lisp te maken.
In de popup kan je een plotter selecteren.

Uiteindelijk wordt de geselecteerde plotternaam weergegeven.

succes, Fred