| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: schriftfelder via lisp (ac2005) (3168 mal gelesen)
|
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1218 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 21. Dez. 2004 09:59 <-- editieren / zitieren --> Unities abgeben:
|
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: 21. Dez. 2004 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1218 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 21. Dez. 2004 13:44 <-- editieren / zitieren --> Unities abgeben:
hallo marc, ich weiß nicht, ob wir uns falsch verstanden haben - ich will keinen lispausdruck in das schriftfeld einfügen - vielmehr möchte ich ein schriftfeldelement via lisp auswählen und dann auch via lisp in der zeichnung positionieren. ich wünsche dir frohe weihnachten und einen guten rutsch ins neue jahr. (allen anderen, die dieses lesen natürlich auch !) gruß Jan :-) ------------------ jan :-) 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: 21. Dez. 2004 13:52 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hi Jan, nein, nein. Ich glaube ich hab' Dich schon verstanden. Aber Du mich? Welcher Objekttyp kommt denn raus, wenn Du mit dem Command "_Field" ein Feld erzeugst? Na? ------------------ Ciao, Marc 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: 22. Dez. 2004 09:13 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hi Jan, würde mich freuen auch mal IRGENDEIN Feedback von Dir auf meine Antworten zu bekommen. Leider neigst Du dazu Dir hier Tips abzugreifen und die helfenden KOMPLETT darüber im UNKLAREN zu lassen, ob Dein Problem gelöst wurde. Ich denke Du bist lange genug dabei um zu wissen, das dies kein guter Stil ist. ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 25. Aug. 2009 10:06 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Eigentlich ein ganz interessantes Thema... wie könnte man dann einfach ein lisp zusammensetzen, wenn ich über (command "_field") die Länge einer Linie abfragen möchte. mein Ansatz wäre (defun c:abfrage () (SETQ wahl (ENTSEL "Linie wählen: ") element (ENTGET (command "field")) ) ) PS.: ich muss quasi weiter manuell auswählen, dass möchte ich gern umgehen Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 25. Aug. 2009 10:18 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 25. Aug. 2009 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hi, was suchst du denn bzw was willst du denn genau machen? die Länge einer Linie (vla-Get-Length(vlax-ename->vla-object(car (entsel "\nObjekt wählen: "))))?? als field? mehrfach ausführen --> also viele Linien und somit viele Felder? diese automatisch einfügen? ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 25. Aug. 2009 10:57 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
ich versuch mir quasi in den Beschriftungsmöglichkeiten mit _field etwas zusammenzustricken, womit ich einfach eine Linie wähle und deren Eigenschaften beschrifte. Bsp Länge ausgeben funktioniert. Indem ich .length mit .layer ersetze kann ich auch den Layer assoziativ beschriften. @dorfy: super wäre, wenn das mit mehreren Linien geht. Allerdings müsste es den Text dann automatisch an die Linie setzen lassen (bsp Anfangspunkt). Ist das mit (getpoint "\n Select Point: ") denn möglich? (defun c:lnkfld () (setq a (car (entsel)) b (getpoint "\n Select Point: ")) (linkedlength a b) ) (vl-load-com) ;;get a reference to model space (setq *model-space* (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ;;pass this function an entity and a point (defun LinkedLength (ent pt / obj objID ip width str) ;;convert the entity to an object (setq obj (vlax-ename->vla-object ent) ;;get the object ID objID (vla-get-objectid obj) ;;convert the point ip (vlax-3D-Point pt) ;;set the width for the MTEXT width 0.0 ;;set the string - this creates the field str (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos objID 2 0) ">%).Length \\f \"%lu2%pr2\">%" ) ) ;;Create the MTEXT entity containing the field. (vla-addMText *model-space* ip width str) )
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: 25. Aug. 2009 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hi cadplayer, zum Thema "Textposition für automatische Beschriftung von Linien (Polylinien, Bögen usw.)" solltest Du Dir mal unbedingt die Funktionen die mit "vlax-curve" beginnen anschauen. Da kann man 'ne Menge Sachen bezogen auf das "Kurven Objekt" (Linien, Polylinien, Bögen usw.) ermitteln. Beispiel:
Code:
(defun MITTEL-PKT? (ENAME /) (setq ENAME (->VLA-OBJECT ENAME)) (vlax-curve-getpointatdist ENAME (/ (vlax-curve-getdistatparam ENAME (vlax-curve-getendparam ENAME) ) 2.0 ) ) )(defun ->VLA-OBJECT (ENAME /) (cond ((= (type ENAME) 'ENAME) (vlax-ename->vla-object ENAME)) ((= (type ENAME) 'VLA-OBJECT) ENAME) ('t NIL) ) ) (defun C:DEMO () (setq XX (MITTEL-PKT? (car (entsel)))) (command "_.circle" XX 2) ) (c:Demo)
Zitat: Original erstellt von cadplayer:
...super wäre, wenn das mit mehreren Linien geht. Allerdings müsste es den Text dann automatisch an die Linie setzen lassen (bsp Anfangspunkt). Ist das mit (getpoint "\n Select Point: ") denn möglich?
Nee, mit getpoint ist das eher nicht möglich, (es sei denn Du möchtest für jedes gewählte Objekt gefragt werden). Du müßtest alle gewählten Objekte in ein SelectionSet aufnehmen und dann pro Textobjekt den Text an eine berechnete oder bereits bekannte Koordinate des jeweiligen Curve-Objects ranschreiben... ------------------ Ciao, Marc 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: 25. Aug. 2009 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 25. Aug. 2009 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
hi cadplayer (defun c:lnkfld (/ aws n *model-space*) (vl-load-com) ;;get a reference to model space (setq *model-space* (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ;(setq a (car (entsel)) ; b (getpoint "\n Select Point: ") ; ) ;(linkedlength a b) (setq aws (ssget '((0 . "LINE")))) (setq n 0) (repeat (sslength aws) (linkedlength (ssname aws n) (cdr (assoc 10 (entget (ssname aws n)))) ) (setq n (1+ n)) ) ) ;;pass this function an entity and a point (defun LinkedLength (ent pt / obj objID ip width str) ;;convert the entity to an object (setq obj (vlax-ename->vla-object ent) ;;get the object ID objID (vla-get-objectid obj) ;;convert the point ip (vlax-3D-Point pt) ;;set the width for the MTEXT width 0.0 ;;set the string - this creates the field str (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos objID 2 0) ">%).Length \\f \"%lu2%pr2\">%" ) ) ;;Create the MTEXT entity containing the field. (vla-addMText *model-space* ip width str) )
------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 25. Aug. 2009 12:16 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Grandios - besten dank an alle ! Darauf warte ich schon seit langem. Super gemacht Die align-routine versuch ich mir mal selber hinzubasteln. Meld mich mal wieder bei Änderungen, wo ich nicht so leicht durchsteige. Alles in allem scheint es mir, kommt man mit den vlisp-funktionen schneller zum Ziel. Mapcar hat da ja einen guten Einstieg in seinem Buch gegeben. Aber es sind halt 2 getrennte paar Schule (Autolisp - Vlisp), die man sich da aneignen muss. Gruss Dirk 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: 25. Aug. 2009 12:23 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Da war det Dorfy schneller... Der vollständigkeit halber auch noch mal meine Lösung mit Mittelpunkt und als besonderen BonBon auch noch ein Handling für Bögen (die Haben keine Eigenschaft .Length) Code:
(vl-load-com)(defun C:LNKFLD (/ INDEX SELSET) (setq INDEX 0) ;_ Zähler für Repeat initialisieren (princ "\nZu beschriftende Linienobjekte wählen:") (if (setq SELSET (ssget '((0 . "*POLYLINE,LINE,ARC")))) ;_ Auswahlsatz mit Filter erstellen (repeat (sslength SELSET) ;_ Jedes Objekt des Auswahlsatzes durchgehen... (LINKEDLENGTH (ssname SELSET INDEX) ;_ Name des Objekts aus Auswahlsatz ermitteln (MITTEL-PKT? (ssname SELSET INDEX)) ;_ Koordinate an Objekt ermitteln (hier Mittelpunkt) ) (setq INDEX (1+ INDEX)) ) ) ) ;;pass this function an entity and a point (defun LINKEDLENGTH (ENT PT / OBJ OBJID IP WIDTH STR STRPROPERTY) ;;convert the entity to an object (setq OBJ (vlax-ename->vla-object ENT) ;;get the object ID OBJID (vla-get-objectid OBJ) ;;convert the point IP (vlax-3d-point PT) ;;set the width for the MTEXT WIDTH 0.0 ;; Handling for Arc Length STRPROPERTY (if (= (strcase (vla-get-objectname OBJ)) "ACDBARC") ".ArcLength" ".Length" ) ;;set the string - this creates the field STR (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos OBJID 2 0) ">%)" STRPROPERTY " \\f \"%lu2%pr2\">%" ) ) ;;Create the MTEXT entity containing the field. (vla-addmtext (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) IP WIDTH STR ) ) (defun MITTEL-PKT? (ENAME /) (setq ENAME (->VLA-OBJECT ENAME)) (vlax-curve-getpointatdist ENAME (/ (vlax-curve-getdistatparam ENAME (vlax-curve-getendparam ENAME) ) 2.0 ) ) )
(defun ->VLA-OBJECT (ENAME /) (cond ((= (type ENAME) 'ENAME) (vlax-ename->vla-object ENAME)) ((= (type ENAME) 'VLA-OBJECT) ENAME) ('t NIL) ) )
...------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 25. Aug. 2009 12:33 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
@Marc dafür ist dein Code um Längen besser... ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) 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: 25. Aug. 2009 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13529 Registriert: 30.11.2003 .
|
erstellt am: 25. Aug. 2009 12:39 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Zitat: Original erstellt von marc.scherer:
Code:
(defun ->VLA-OBJECT (ENAME /) (cond ((= (type ENAME) 'ENAME) (vlax-ename->vla-object ENAME)) ((= (type ENAME) 'VLA-OBJECT) ENAME) ('t NIL) ) )
was soll eigentlich das ('t NIL) ??? ------------------ - 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 |
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: 25. Aug. 2009 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Zitat: Original erstellt von cadplayer: Die align-routine versuch ich mir mal selber hinzubasteln.
Mal 'n Tip was Du für automatische Positionierung noch alles berücksichtigen mußt: # Osnap ausschalten # WKS setzen # Laufrichtung der zu beschriftenden Objekte ermitteln # Textposition für zu beschriftendes Objekt relativ zum Objekt berechnen (z.B. nie "auf dem Kopf", immer darüber, in einem bestimmten Abstand) # Eventuell Texteinfügepunkt auf "Unten, Mitte" setzen # Ausrichtung des Textobjekts relativ zum beschriftenden Objekt (siehe Laufrichtung des Objekts) # Alte Werte für UCS und Osnap wiederherstellen ------------------ Ciao, Marc 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: 25. Aug. 2009 12:43 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 26. Aug. 2009 08:06 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Mein Ansatz zum Ausrichten von Text an Linie: 1) wie schaffe ich es, dass es den Winkelwert in riwi auf den aws-text überträgt? 2) wie kann ich mtext auswählen? (defun c:rt () (SETQ wahl (ENTSEL "select line: ") element (ENTGET (CAR wahl)) anfp (CDR(ASSOC 10 element)) endp (CDR(ASSOC 11 element)) riwi (atof (angtos (ANGLE anfp endp) 2 10)) ) ; (if (setq obj (entsel "\select text: ")) (progn (setq objname (car obj)) (command "_change" objname "" "" "" riwi) ; rotate text ) ) ) Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 26. Aug. 2009 08:21 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hi Dirk, du musst an den entsprechenden GC vom Text oder mit VL die Eigenschaft (Property Rotation?!) neu setzen. Das hat aber nix mehr mit diesem Thread zu tun?! INHO wäre ein neuer Thread angebracht! Edit: In den Express-Tools gibt es Text drehen (torient), reicht das nicht? ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) [Diese Nachricht wurde von Dorfy am 26. Aug. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 26. Aug. 2009 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
@Dorfy okay hast recht, mein Gedanke ist: in die Routine noch eine Verfeinerung vorzunehmen, d.h. den generierten mtext an der gewählten Linie auszurichten. Meine Schwierigkeit bestehen darin, erstmal eine Rotation hinzubekommen. Sicher geht torient einwandfrei, aber das einzubauen fände ich Quatsch, weil ich dann nochmal die Ausrichtung manuell wählen müsste oder irre ich mich da? D
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 26. Aug. 2009 10:27 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hi Dirk, (vla-addMText *model-space* ip width str) ;liefert dir den text (vla-get-angle (vlax-ename->vla-object (car (entsel))))) ;liefert dir den winkel einer linie (Bögen PL sind komplizierter) (vla-put-rotation text winkel);text drehen Das Zusammenbau/Anpassen bekommst du sicher auch selbst hin ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) 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: 26. Aug. 2009 11:17 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Zitat: Original erstellt von Dorfy: ;liefert dir den winkel einer linie (Bögen PL sind komplizierter)
Da spielt aber die Laufrichtung der Linie eine erheblich Rolle ob der Text "auf dem Kopf steht". Zu dem Zweck jage ich Winkelwerte immer durch folgende Sub-Routine: Code:
;;; *** Sub-Pgm *** Sub-Pgm *** Sub-Pgm *** Sub-Pgm *** Sub-Pgm *** Sub-Pgm *** ;;; Unterprogramm zur Winkelkorrektur. ;;; "Normalisiert" einen Winkel so, dass er nicht "auf dem Kopf" steht! (defun winkel-korrektur (Eingangswinkel /) (if (and (<= Eingangswinkel (* (/ 3.0 4.0) (* 2 pi))) (> Eingangswinkel (* (/ 1.0 4.0) (* 2 pi))) ) ;_ end of or (setq Eingangswinkel (+ Eingangswinkel pi)) ) Eingangswinkel ;_ Rückgabe des Winkels an rufende Funktion )
Anwendungsbeispiel:
Code:
(vla-put-rotation (vlax-ename->vla-object (car (entsel "\nText:"))) (WINKEL-KORREKTUR (vla-get-angle (vlax-ename->vla-object (car (entsel "\nLinie:")))) ) )
------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13529 Registriert: 30.11.2003 .
|
erstellt am: 26. Aug. 2009 11:23 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Zitat: Original erstellt von Dorfy:
(vla-get-angle (vlax-ename->vla-object (car (entsel))))) ;liefert dir den winkel einer linie (Bögen PL sind komplizierter)
deshalb ist vielleicht die Funktion vlax-curve-getFirstDeriv interessanter ..
------------------ - 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 |
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: 26. Aug. 2009 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Zitat: Original erstellt von cadplayer: 2) wie kann ich mtext auswählen?
Am besten indem Du in der Funktion die den MText erzeugt (= LINKEDLENGTH) weiteres Handling für dieses Objekt einbaust: Code:
;;pass this function an entity and a point (defun LINKEDLENGTH (ENT PT / OBJ OBJID IP WIDTH STR STRPROPERTY OBJMTEXT)[...] ;;Create the MTEXT entity containing the field. (setq OBJMTEXT (vla-addmtext (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) IP WIDTH STR ) ) ;; Ab hier: (machwas-mit-OBJMTEXT) [...]
.------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 26. Aug. 2009 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
snp Mitglied
Beiträge: 8 Registriert: 08.08.2011
|
erstellt am: 15. Feb. 2012 07:42 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hallo, kann mir jemand dabei helfen den Code so zu bearbeiten damit auch das Material dazu ausgegeben wird. Danke Code: (vl-load-com) (defun C:LNKFLD (/ INDEX SELSET) (setq INDEX 0) ;_ Zähler für Repeat initialisieren (princ "\nZu beschriftende Linienobjekte wählen:") (if (setq SELSET (ssget '((0 . "*POLYLINE,LINE,ARC")))) ;_ Auswahlsatz mit Filter erstellen (repeat (sslength SELSET) ;_ Jedes Objekt des Auswahlsatzes durchgehen... (LINKEDLENGTH (ssname SELSET INDEX) ;_ Name des Objekts aus Auswahlsatz ermitteln (MITTEL-PKT? (ssname SELSET INDEX)) ;_ Koordinate an Objekt ermitteln (hier Mittelpunkt) ) (setq INDEX (1+ INDEX)) ) ) ) ;;pass this function an entity and a point (defun LINKEDLENGTH (ENT PT / OBJ OBJID IP WIDTH STR STRPROPERTY) ;;convert the entity to an object (setq OBJ (vlax-ename->vla-object ENT) ;;get the object ID OBJID (vla-get-objectid OBJ) ;;convert the point IP (vlax-3d-point PT) ;;set the width for the MTEXT WIDTH 0.0 ;; Handling for Arc Length STRPROPERTY (if (= (strcase (vla-get-objectname OBJ)) "ACDBARC") ".ArcLength" ".Length" ) ;;set the string - this creates the field STR (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos OBJID 2 0) ">%)" STRPROPERTY " \\f \"%lu2%pr2\">%" ) ) ;;Create the MTEXT entity containing the field. (vla-addmtext (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) IP WIDTH STR ) ) (defun MITTEL-PKT? (ENAME /) (setq ENAME (->VLA-OBJECT ENAME)) (vlax-curve-getpointatdist ENAME (/ (vlax-curve-getdistatparam ENAME (vlax-curve-getendparam ENAME) ) 2.0 ) ) )
(defun ->VLA-OBJECT (ENAME /) (cond ((= (type ENAME) 'ENAME) (vlax-ename->vla-object ENAME)) ((= (type ENAME) 'VLA-OBJECT) ENAME) ('t NIL) ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 15. Feb. 2012 09:05 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hi, du willst das Material von 2D-Objekten ausgeben? Grundsätzlich relativ einfach, da du fast alles hast. Du brauchst nur die Stelle, an der das Schriftfeld zusammengebaut wird, zu erweitern:
Code: (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId "...
Erzeuge händisch ein Schriftfeld und schau dir den Code an, der generiert wird. Zusammen mit dem oben zitierten Block solltest du das lösen können. Viel Erfolg CADchup
------------------ CADmaro.de [Diese Nachricht wurde von CADchup am 15. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snp Mitglied
Beiträge: 8 Registriert: 08.08.2011
|
erstellt am: 15. Feb. 2012 11:01 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 15. Feb. 2012 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Ja, aber wie weit bist du denn überhaupt gekommen? Kein Mensch weiß, wie viele Klammern du schon gesetzt hast. Ok, auf dem Screenshot siehst du das Dialogfeld für die Schriftfelderzeugung. Ich habe eine Linie ausgewählt und in der mittleren Spalte "Material". Unten im Dialog taucht daraufhin der Schriftfeldausdruck auf, wie er verwendet würde, wenn ich den Dialog bestätige. Wichtig für dich ist das Verständnis eben dieser Zeile: %<\AcObjProp Object(%<\_ObjId 2118207072>%).Material>% und der Zusammenhang mit dem Lispcode der in deinem Tool verwendet wird:
Code: ;;set the string - this creates the field STR (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos OBJID 2 0) ">%)" STRPROPERTY " \\f \"%lu2%pr2\">%" ) )
Der erste Teil der Zeichenkette ist identisch, dann kommt die Object ID, dann obligatorische Steuerzeichen, dann die Eigenschaft, die abgerufen werden soll und wieder Steuerzeichen. Gut. Angenommen, du willst im Schriftfeld eine zweite Zeile für das Objektmaterial haben, dann hängst du als letzte Zeichenkette (also vor die schließende Klammer des strcat!) zunächst ein "\n" an. Das sorgt für einen Zeilenumbruch. Danach kopierst du einfach die ersten drei Zeilen des schon vorhandenen Schriftfeldcodes und hängst zuletzt den entsprechenden Schluss für das Material an. Wie der auszusehen hat, haben wir im Schriftfeld-Dialog gesehen.
Gruß CADchup ------------------ CADmaro.de [Diese Nachricht wurde von CADchup am 15. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snp Mitglied
Beiträge: 8 Registriert: 08.08.2011
|
erstellt am: 15. Feb. 2012 11:48 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hallo CadChup, leider komme ich nicht weiter: Hier der Code dem ich erstellt habe --> FEHLER: Falsch platzierter Punkt in Eingabe auf das "\n" habe ich bewusst verzichtet, möchte alles in einer Zeile mit einen "; " getrennt haben. ;;set the string - this creates the field STR (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos OBJID 2 0) ">%)" STRPROPERTY " \\f \"%lu2%pr2\">%" ) "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (.Material) ">%)" ) [Diese Nachricht wurde von snp am 15. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 15. Feb. 2012 12:23 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 15. Feb. 2012 12:40 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 15. Feb. 2012 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Das ist doch schon mal ein Anfang. Schreibst du das im VLIDE? Da könntest du durch Doppelklicks auf Klammern prüfen, wo sie öffnen, bzw. schließen. Außerdem würdest du die verschiedenen Datentypen gut erkennen können. Wenn du die (strcat...-Klammer prüfst, siehst du, dass sie zu früh, unterhalb des alten Schriftfelds, wieder geschlossen wird: Das zweite Schriftfeld soll noch miteingebaut werden. Ersetze also die erste schließende Klammer durch dein Trennzeichen ";" Womit wir beim Thema Datentypen wären. Die Funktion strcat fügt Zeichenketten zusammen; Zeichenketten sind alles, was in Anführungszeichen steht! Dein (.Material) sollte also ein ".Material" sein. Weiter vorne fehlt dir außerdem noch die Definition der Object-ID. Die hast du anscheinend vergessen vom ersten Schriftfeld zu kopieren. Fertig. ------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snp Mitglied
Beiträge: 8 Registriert: 08.08.2011
|
erstellt am: 23. Jan. 2013 09:42 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hallo, tut mir leid das ich so einen alten Beitrag aufrolle. Kann mir jemand sagen wo ich die Schriftgröße und die Ausrichtung ändern kann. Habe mir die LSP was den Text angeht an meine Bedürfnisse angepasst, leider weiß ich nicht wo ich die Größe und Ausrichtung (Mitte zentriert) ändern kann. hier die LSP: (vl-load-com) (defun C:LNKFLD (/ INDEX SELSET) (setq INDEX 0) ;_ Zähler für Repeat initialisieren (princ "\nZu beschriftende Linienobjekte wählen:") (if (setq SELSET (ssget '((0 . "*POLYLINE,LINE,ARC")))) ;_ Auswahlsatz mit Filter erstellen (repeat (sslength SELSET) ;_ Jedes Objekt des Auswahlsatzes durchgehen... (LINKEDLENGTH (ssname SELSET INDEX) ;_ Name des Objekts aus Auswahlsatz ermitteln (MITTEL-PKT? (ssname SELSET INDEX)) ;_ Koordinate an Objekt ermitteln (hier Mittelpunkt) ) (setq INDEX (1+ INDEX)) ) ) ) ;;pass this function an entity and a point (defun LINKEDLENGTH (ENT PT / OBJ OBJID IP WIDTH STR STRPROPERTY) ;;convert the entity to an object (setq OBJ (vlax-ename->vla-object ENT) ;;get the object ID OBJID (vla-get-objectid OBJ) ;;convert the point IP (vlax-3d-point PT) ;;set the width for the MTEXT WIDTH 0.0 MTextHeight 50.0 ;; Handling for Arc Length STRPROPERTY (if (= (strcase (vla-get-objectname OBJ)) "ACDBARC") ".ArcLength" ".Length" ) ;;set the string - this creates the field STR (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos OBJID 2 0) ">%)" STRPROPERTY " \\f \"%lu2%pr2%ps[d20; , m]%ct8[0.01]\">%" ) ) ;;Create the MTEXT entity containing the field. (vla-addmtext (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) IP WIDTH STR ) ) (defun MITTEL-PKT? (ENAME /) (setq ENAME (->VLA-OBJECT ENAME)) (vlax-curve-getpointatdist ENAME (/ (vlax-curve-getdistatparam ENAME (vlax-curve-getendparam ENAME) ) 2.0 ) ) ) (defun ->VLA-OBJECT (ENAME /) (cond ((= (type ENAME) 'ENAME) (vlax-ename->vla-object ENAME)) ((= (type ENAME) 'VLA-OBJECT) ENAME) ('t NIL) ) ) Danke, Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4189 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 23. Jan. 2013 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
... du musst das erzeugte MText-Objekt merken und kannst diesem dann mit (vla-put-... ) weitere Eigenschaften setzen. Grüße! Holger ------------------ Holger Brischke FREIE SCHULUNGSPLÄTZE -- C#.NET-Schulung im Mai 2013 Bei Interesse bitte melden! CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snp Mitglied
Beiträge: 8 Registriert: 08.08.2011
|
erstellt am: 23. Jan. 2013 14:29 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4189 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 23. Jan. 2013 14:58 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Zitat: Original erstellt von snp: Hallo,danke für die Antwort, habe aber keine Ahnung von LSP-programmieren. Ist hier jemand der mir diese LSP um die Funktion Schriftgröße, Ausrichtung erweitern kann, Bitte. Danke, Gruß
Da gibt's hier sicher einige, die das machen könnten und vielleicht auch tun. Ich finde es aber unehrlich, dass man hier scheinheilig eine Frage verfasst, in der Hoffnung, dass schon irgendjemand die Lösung mundgerecht einbauen wird. Wiederum ehrlich finde ich, auch noch zuzugeben, dass man keine Ahnung hat und auch nicht vor hat, sich Wissen in dieser Richtung anzueigenen. Da folglich immer noch darauf gehofft wird, dass jemand die fertige Lösung postet, sei mir der Hinweis erlaubt, dass das Forum für die Diskussion von Programmierthemen gedacht ist. Dass man keine Ahnung hat, ist kein Problem. Beim Wunsch, diesen Zustand zu ändern, wird dir hier sicher geholfen. Grüße! Holger ------------------ Holger Brischke FREIE SCHULUNGSPLÄTZE -- C#.NET-Schulung im Mai 2013 Bei Interesse bitte melden! CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |