Beste,
Ik wil een lisp-routine maken die controleert of de plotter en het ingestelde papier wel bestaan van een opgegeven layout-naam. Ik heb op veel websites visual-lisp code gevonden om dit te doen. Helaas heb ik zelf weinig kennis van visual-lisp. Het lukt om de plotter te controleren (zie code). Het lukt nog niet om te bepalen welk papier is ingesteld. Weet iemand hoe dit moet?
Verder kom ik de termen CanonicalMediaNames en LocalMediaNames tegen. Weet iemand wat dit betekent?
(defun c:checkplotter ( / GetPlotDevices LONAME LONAMEVL AD EXISTINGPLOTTERS PLOTTER)
(defun GetPlotDevices (AD LONAME /)
(vla-RefreshPlotDeviceInfo
(vla-get-activelayout AD)
)
(vlax-safearray->list
(vlax-variant-value
(vla-getplotdevicenames
(vla-item (vla-get-layouts AD) LONAME)
)
)
)
);_defun GetPlotDevices
(setq LONAME (getstring "\nGeef de layoutnaam op: "))
(setq LONAMEVL (vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) LONAME))
(setq AD (vla-get-activedocument (vlax-get-acad-object )))
(setq EXISTINGPLOTTERS (GetPlotDevices AD LONAME))
(setq PLOTTER (vla-get-ConfigName LONAMEVL))
(if (member PLOTTER EXISTINGPLOTTERS)
(print (strcat "\nDe printer " PLOTTER " bestaat."))
(print (strcat "\nDe printer " PLOTTER " bestaat NIET."))
);_if
(print)
);_defun
Groeten,
Reimer
Citaat van: Reimer op ma 12 12 2016, 11:37:51Het lukt nog niet om te bepalen welk papier is ingesteld.
(setq #LocMedName (vla-GetLocaleMediaName (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-Acad-Object))) (vla-get-CanonicalMediaName (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-Acad-Object))))))
Bedankt, dit werkt!
Ik kwam ook nog een toelichting tegen over de verschillende media-soorten:
http://forums.autodesk.com/t5/visual-basic-customization/canonical-media-name-vs-locale-name/td-p/351109 (http://forums.autodesk.com/t5/visual-basic-customization/canonical-media-name-vs-locale-name/td-p/351109)
Reimer.
Citaat van: Reimer op ma 12 12 2016, 14:31:06Bedankt, dit werkt!
Kan u de volledige code voor het testen op de aanwezigheid van het ingestelde papierformaat ook nog posten aub want ik vind dit wel heel interessant.
Reimer?
Ik ben wel regelmatig op cadsite te vinden maar heb niet altijd direct tijd om te reageren. :mrgreen:
(in dit geval moest ik de code weer 'losmaken' uit mijn totale programma)
Zoals gezegd heb ik weinig kennis van Visual-lisp. De code is wellicht wat rommelig en bevat mogelijk dubbelingen maar voor mij werkt het. Gebruik op eigen risico natuurlijk.
Groeten,
Reimer
(defun c:checkplotter ();( / GetCanonicalMediaNames GetLocaleMediaName ListAllMediaNames LONAME LONAMEVL AD EXISTINGPLOTTERS PLOTTER EXISTINGPAPERSIZES PAPER)
(vl-load-com)
(defun GetCanonicalMediaNames (ad LONAMEVL /)
(vla-RefreshPlotDeviceInfo LONAMEVL)
(vlax-safearray->list
(vlax-variant-value
(vla-GetCanonicalMediaNames LONAMEVL)
)
)
);_defun GetCanonicalMediaNames
(defun GetLocaleMediaName (ad LONAMEVL / mn mnl)
(foreach mn (GetCanonicalMediaNames ad LONAMEVL)
(setq mnl (cons (vla-GetLocaleMediaName LONAMEVL mn) mnl))
);_foreach
(reverse mnl)
);_defun GetLocaleMediaName
(defun ListAllMediaNames (PLOTTER LONAMEVL ad / apmn)
(if (/= PLOTTER "None")
(progn
(vla-put-configname LONAMEVL PLOTTER)
(setq apmn (cons PLOTTER apmn))
(setq apmn (cons (GetLocaleMediaName ad LONAMEVL) apmn))
);_progn
);_if
(car apmn)
);_defun ListAllMediaNamesRR
;;Main programm
(setq AD (vla-get-activedocument (vlax-get-acad-object )))
(setq LONAME (getstring "\nGeef de layoutnaam: "))
(if (member LONAME (layoutlist))
(progn
(setq LONAMEVL (vla-item (vla-get-layouts AD) LONAME))
;;check plotter
(vla-RefreshPlotDeviceInfo LONAMEVL)
(setq EXISTINGPLOTTERS
(vlax-safearray->list
(vlax-variant-value
(vla-getplotdevicenames LONAMEVL)
)
)
);_setq
(setq PLOTTER (vla-get-ConfigName LONAMEVL))
(cond
((= PLOTTER "None")(princ (strcat "\nDe printer is None -EINDE-.")))
((member PLOTTER EXISTINGPLOTTERS)
(progn
;;check papersize
(setq EXISTINGPAPERSIZES (ListAllMediaNames PLOTTER LONAMEVL ad))
(setq PAPER
(vla-GetLocaleMediaName
LONAMEVL
(vla-get-CanonicalMediaName LONAMEVL)
)
);_setq
(if (member PAPER EXISTINGPAPERSIZES)
(princ (strcat "\nDe printer en het papier zijn goed ingesteld. (" PLOTTER " / " PAPER ")"))
(princ (strcat "\nHet papierformaat " PAPER " is niet gevonden -EINDE-."))
);_if paper
);_progn plotter
);_cond
(T (princ (strcat "\nDe printer " PLOTTER " is niet gevonden -EINDE-.")))
);_cond
);_progn LONAME
(princ (strcat "\nDe opgegeven layout " LONAME " is niet gevonden -EINDE-."))
);_if layout
(print)
)
Merci Reimer, en mijn excuses voor mijn ongeduld :wink: