| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Polylinie Eigenschaften zuweisen (1787 mal gelesen)
|
Metallbau Mitglied Metallbauplaner
Beiträge: 41 Registriert: 13.01.2005
|
erstellt am: 17. Feb. 2005 16:36 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 17. Feb. 2005 16:45 <-- editieren / zitieren --> Unities abgeben: Nur für Metallbau
zum Ändern gibts die Funktion (entmode ... die Eigenschfaten sind in den dxf-Codes verschlüsselt. Es get auch über ActiveX mittels vlax-put-property ... -> F1 im Lispeditor (ActiveX und VBA-Referenz) siehe zu dem thema auch mal auf der AFRALISP-SITE ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Metallbau Mitglied Metallbauplaner
Beiträge: 41 Registriert: 13.01.2005
|
erstellt am: 17. Feb. 2005 17:05 <-- editieren / zitieren --> Unities abgeben:
Hallo Cadmium Danke für den Tipp. Vielleicht noch ein Beispiel mit dxf-Codes wäre nicht schlecht... Z.B. auf Seite 97 ist Polylinie beschrieben mit Codes-Spalte werden diese Codes im Befehl etwa so verwendet : (setq a (ssget "40")) ??? ------------------ Danke... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 17. Feb. 2005 17:15 <-- editieren / zitieren --> Unities abgeben: Nur für Metallbau
Hallo Metallbau, deine Frage ist nur mit sehr umfangreichen Antworten korrekt zu beantworten. Das Handling ist für alle Objekte ziemlich gleich, egal ob DXF oder ActiveX. Es wäre einfacher, wenn du schreibst, was du vor hast, und wobei du die Probleme hast. Grüße Holger CAD on demand GmbH AUGCE - Manager Deutschland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 17. Feb. 2005 19:21 <-- editieren / zitieren --> Unities abgeben: Nur für Metallbau
Hi Metallbau, in welchem Buch steht was auf Seite 97??? Und was hat ssget DIREKT mit dem Ändern von Eigenschaften zu tun? Um Dir einen kleine Einstieg zu verschaffen, habe ich mal ein paar kleine Funktionen gebaut die Dir eine angeklickte Polylinie auf Layer 0 legen und den DXF-Code bzw. die ActiveX Eigenschaften und Methoden anzeigen. Analog zu der Layereigenschaft kann man auch diverse andere Eigenschaften manipulieren. Am besten Du wirfst in AutoCAD mal den VisualLisp Editor an, lädst den Code und schaust Dir via Debugging Funktionen mal an was da so abgeht...
Code:
;; Entmod Demo... ;; Am besten nachzuverfolgen über die VLisp-IDE ;; Menü: "Extras" -> "Auto Lisp" -> "Visual Lisp Editor"(defun C:ENTMOD-DEMO (/ PLINE-DATA PLINE-OBJ) (if (setq PLINE-OBJ (car (entsel "\nPolylinie anklicken: "))) (progn (setq PLINE-DATA (entget PLINE-OBJ)) (if (wcmatch (strcase (cdr (assoc 0 PLINE-DATA))) "*POLYLINE") (progn ;; Nur zum Visualisieren... (PRIN1-LIST PLINE-DATA) ;; Verändern einer Eigenschaft: Hier Layer (if (setq PLINE-DATA (DXFMOD PLINE-DATA (cons 8 "0"))) (PRIN1-LIST PLINE-DATA) (princ "\nNichts verändert...") ) ) (princ "\nKeine Polylinie angeklickt...") ) ) (princ "\nNichts angeklickt...") ) (princ) ) (defun DXFMOD (OBJ-LST DOTTED-PAIR-NEW / ALT RETVAL) (if (setq ALT (assoc (car DOTTED-PAIR-NEW) OBJ-LST)) (setq RETVAL (subst DOTTED-PAIR-NEW ALT OBJ-LST)) (setq RETVAL (append DOTTED-PAIR-NEW OBJ-LST)) ) (setq RETVAL (entmod RETVAL)) )
(defun PRIN1-LIST (LST /) (foreach ELEM LST (terpri) (prin1 ELEM) ) )
;; ActiveX Demo... (defun C:AX-DEMO (/ ERR-OBJ PLINE-OBJ) (VL-LOAD-COM) (if (setq PLINE-OBJ (car (entsel "\nPolylinie anklicken: "))) (progn (setq PLINE-OBJ (vlax-ename->vla-object PLINE-OBJ)) (if (wcmatch (strcase (vla-get-objectname PLINE-OBJ)) "*POLYLINE" ) (progn ;; Nur zum Visualisieren... (vlax-dump-object PLINE-OBJ 't) ;; Verändern einer Eigenschaft: Hier Layer (if (vl-catch-all-error-p (setq ERR-OBJ (vl-catch-all-apply 'vla-put-layer (list PLINE-OBJ "0") ) ) ) (alert (strcat "Fehler aufgetreten:\n\n" (vl-catch-all-error-message ERR-OBJ) ) ) (progn (princ "\nÄnderung vorgenommen...") (vlax-dump-object PLINE-OBJ 't) ) ) ) (princ "\nKeine Polylinie angeklickt...") ) ) (princ "\nNichts angeklickt...") ) )
Bei Fragen beschäftigst Du Dich am besten mal mit Mapcars Lisp Tutorials (findest Du im Netz problemlos via Google) ------------------ Ciao, Marc [Diese Nachricht wurde von marc.scherer am 17. Feb. 2005 editiert.] [Diese Nachricht wurde von marc.scherer am 17. Feb. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
vision Mitglied
Beiträge: 113 Registriert: 27.10.2003 AutoCAD 2015 Expresstools Windows 10
|
erstellt am: 18. Feb. 2005 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für Metallbau
Hallo, ich benutze dazu dieses Lisp: (defun Init () (setq Err *error* *error* Fehler ) )
(defun ReInit () (redraw OBJEKT 4) (setq *error* Err) (princ) ) (defun Fehler (s) ;(print (strcat "Fehler: "s)) (ReInit) ) (defun Lesen () (progn (setq OBJEKT Ax) (redraw OBJEKT 3) (if(and (not(vl-catch-all-error-p (setq GB (vl-catch-all-apply 'vlax-get-property (list (vlax-ename->vla-object OBJEKT) 'ConstantWidth ) ) ) ) ) (not(vl-catch-all-error-p (setq LTG (vl-catch-all-apply 'vlax-get-property (list (vlax-ename->vla-object OBJEKT) 'color ) ) ) ) ) (not(vl-catch-all-error-p (setq LAY (vl-catch-all-apply 'vlax-get-property (list (vlax-ename->vla-object OBJEKT) 'layer ) ) ) ) ) (not(vl-catch-all-error-p (setq LTYPE (vl-catch-all-apply 'vlax-get-property (list (vlax-ename->vla-object OBJEKT) 'linetype ) ) ) ) ) ) (Schreiben) ;Unterprogamm ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun Schreiben () (while (princ "\n Die zu ändernde Leitung wählen!") (setq AUSWAHL(ssget "_:S" )) (setq Ax (ssname AUSWAHL 0)) (setq Aw (entget Ax)) (if (= (cdr (assoc 0 Aw)) "POLYLINE") (progn ;Polylinie (vl-catch-all-error-p (vl-catch-all-apply 'vlax-put-property (list (vlax-ename->vla-object Ax) 'ConstantWidth GB ) ) ) (vl-catch-all-error-p (vl-catch-all-apply 'vlax-put-property (list (vlax-ename->vla-object Ax) 'color LTG ) ) ) (vl-catch-all-error-p (vl-catch-all-apply 'vlax-put-property (list (vlax-ename->vla-object Ax) 'layer LAY ) ) ) (vl-catch-all-error-p (vl-catch-all-apply 'vlax-put-property (list (vlax-ename->vla-object Ax) 'linetype LTYPE ) ) ) ) (progn ;wenn Linie dann zur Polylinie! (command "_pedit" Ax "_y" "") )) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun C:POLYEIG (/ OBJEKT GB LTG Auswahl Aw Ax) ;Polylinienwerte übertragen! (Init) (princ "\n Musterleitung auswählen!") (setq AUSWAHL(ssget "_:S" )) (setq Ax (ssname AUSWAHL 0)) (setq Aw (entget Ax)) (vl-load-com) (if (= (cdr (assoc 0 Aw)) "POLYLINE")(Lesen) ;Unterprogramme (progn (princ "\n Abbruch: Keine Leitung (Polylinie) ausgewählt!") (princ) ) ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 18. Feb. 2005 14:06 <-- editieren / zitieren --> Unities abgeben: Nur für Metallbau
Hi Vision, wieso schreibst' denn alles doppelt? Zitat: Vision schrub: ...(vl-catch-all-error-p (setq LTG (vl-catch-all-apply 'vlax-get-property (list (vlax-ename->vla-object OBJEKT))
...laß das bloß den Axel (mapcar) ned' sehen :-) ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mazur-ch Mitglied
Beiträge: 74 Registriert: 31.10.2008 ACAD 2020, Win 10 64Bit
|
erstellt am: 29. Mrz. 2012 17:12 <-- editieren / zitieren --> Unities abgeben: Nur für Metallbau
Hallo zusammen Kann dieses LISP von Marc Scherrer so angepasst werden, dass nicht nur ein Objekt angewählt werden kann, sondern eine beliebige Anzahl? Anschliessend ist die Frage, ob diese Objekte automatisch durch das LISP selbst angewählt werden können (evtl. durch eine eigene Funktion, ist wahrscheinlich übersichtlicher?)? Geht dies evtl. mit SSGET oder ähnlich? Grüsse von einem anderen Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 29. Mrz. 2012 18:35 <-- editieren / zitieren --> Unities abgeben: Nur für Metallbau
|