(vl-load-com) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Weitere Programmierhilfe ;;; ; http://knowledge.autodesk.com/de/search-result/caas/CloudHelp/cloudhelp/2015/DEU ; /AutoCAD-AutoLISP/files/GUID-FF4F04CC-9DEF-41C7-8C8A-20635DE22A41-htm.html ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; Automatisiertes Versetzen von Konturen ;;; ;;; Udo Hübner für CAD.de 01.09.2015 ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Idee: http://ww3.cad.de/foren/ubb/Forum145/HTML/004308.shtml ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Weiterentwicklung / Verbesserungen ;;; Prüfen, ob Ursprungslayer nicht gesperrt ist, sonst lassen Objekte sich ;;; ;;; anchließend nicht verlegen. ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Subfunctions (defun uh:createlayer (Name Farbe Linientyp) (if (not (tblsearch "LAYER" "LINIE_BGL")) (command-s "_.Layer" "_Make" Name "_Color" Farbe "" "_LType" Linientyp "" "") ) ) (defun uh:selectObjects (SelType Filter) (if Seltype (ssget SelType Filter) (ssget Filter) ) ) ; Main Function to offset (defun UH:CreateOffsets (Sset Offset Layer / obj cnt offset-Obj OffsetObjs) (if (and sset (> (setq cnt (sslength sset)) 0)) ; wenn mehr als 0 Konturen gewählt wurden (progn (while (>= (setq cnt (1- cnt)) 0) (setq obj (vlax-ename->vla-object (ssname sset cnt))) (setq OffsetObjs (vla-offset obj offset)) ; gibt ein Safearray Object mit vla-objects zurück (foreach offset-Obj (vlax-safearray->list (vlax-variant-value OffsetObjs)) (vla-put-color offset-Obj acByLayer) ; 'acByLayer = 256 = Farbe auf vonlayer zurücksetzen (vla-put-layer offset-Obj Layer) ;Layer wechseln ) ) ) ) ) ; User ineractive Command - Trennung Zwischen Aktion und Interaktion (defun C:UHMOFFSET ( / Layername Versatz) (if (= "" (Setq Layername (Getstring 'T (strcat "Layername für Versatzkonturen eingeben <" (getvar "clayer") ">:")))) (setq Layername (getvar "clayer")) ) ; ggf. Prüfen ob Layername gültig ist (initget 6) (if (Setq Versatz (getreal (strcat "Versatz eingeben <" (rtos (getvar "OFFSETDIST")) ">:"))) (setvar "OFFSETDIST" Versatz) ; else (setq Versatz (getvar "OFFSETDIST")) ) (uh:createlayer Layername "7" "Continuous") (uh:createoffsets (uh:selectobjects nil '((0 . "LWPOLYLINE,LINE,CIRCLE"))) Versatz Layername ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Load Message ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (Prompt (strcat "UHMOFFSET steht zur Verfügung und wird beim Laden einmalig\n" "mit vordefinierten Werten ausgeführt")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Action on Load ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Ab hier löschen, wenn beim Ladevorgang noch nichts ausgeführt werden soll (uh:createlayer "LINIE_BGL" "5" "Continuous") (uh:createoffsets (uh:selectobjects "_X" '((0 . "LWPOLYLINE")(62 . 1))) 1.0 ; Offset "LINIE_BGL" ; Layername ) (prin1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; End ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;