FastFiber

Controleren of ingestelde papier bestaat (opgelost)

Gestart door Reimer, ma 12 12 2016, 11:37:51

Vorige topic - Volgende topic

Reimer

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

gery

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))))))
AutoCAD 2020 - Windows 10

Reimer


gery

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.
AutoCAD 2020 - Windows 10

gery

AutoCAD 2020 - Windows 10

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)
)

gery

Merci Reimer, en mijn excuses voor mijn ongeduld  :wink:
AutoCAD 2020 - Windows 10

FastFiber