| |
| 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: FYI: Eigenschaftsabfrage in Feld verknüpft mit Objekt (6779 mal gelesen)
|
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 03. Apr. 2007 20:17 <-- editieren / zitieren --> Unities abgeben:
Hi, da ich selber eher länger gesucht habe, möchte ich es Euch nicht vorenthalten: Der Code anbei stammt in seiner Urform von: http://rkmcswain.blogspot.com/2006/09/create-field-linked-to-object.html Code:
(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) )
Für die Eigenschaftsabfrage können folgende Argumente (Fallbeispiel Polylinie) verwendet werden - der von mir fett markierte Teil im Code muss getauscht werden: Zitat:
Area Closed TrueColor Elevation Type ConstantWidth Layer Length Linetype LinetypeGeneration LinetypeScale Lineweight Material ObjectName PlotStyleName Thickness
Für andere Objekte gilt: Geltend gemacht werden muss dabei der Wert/Ausdruck der unten im Feld Field expression zum Tragen kommt (bei einem Bogen wäre demzufolge die Längenabfrage mittels ArcLength möglich). Warum das ganze ? Ich persönlich arbeite gerne mit Feldern, da wir häufig Werte haben die sich ändern und das aufgrund der Abhängigkeit zu einem Objekt... Jedesmal neubeschriften nervt tierisch... - und die Felderstellung im AutoCAD pur ist suboptimal - meiner Meinung nach... Achja - beim Code könnte man natürlich auch noch vorher eine Abfrage für die Systemvariable TEXTSIZE einbauen, damit die Felder dann auch in einer entsprechenden Grösse erstellt werden. Viel Spass beim zukünftig schnelleren Erstellen von Feldern ! ------------------ Grüsse Thomas NACHTRAG: Achtet natürlich beim evaluierten Wert darauf, ob es einer ist, der bei der Formatierung zB eine Genauigkeit/Dezimalstellen verträgt - ja/nein-Werte werden auf Nachkommastellen eher negativ reagieren... [Diese Nachricht wurde von tunnelbauer am 03. Apr. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
holgerlab Mitglied Haustechniker
Beiträge: 446 Registriert: 02.12.2004
|
erstellt am: 13. Dez. 2007 09:26 <-- editieren / zitieren --> Unities abgeben: Nur für tunnelbauer
Hi Thomas, danke für den Code. Ich habe ein wenig damit gebastelt. Ich wollte die Fläche von geschlossenen Polylinien ermitteln. Allerdings zeichne ich im mm und das Ergebnis soll in m sein. Lösung Code: .Length \\f \"%lu2%pr2\">% ersetzen durch .Area \\f \"%lu2%pr2%ct8[1e-006]\">%" Denn Code bekommt man raus, wenn man ein Schriftfeld herkömmlich erstellt.
und so bekommt man auch noch "m²" angehängt. .Area \\f \"%lu2%pr2%ps[,m²]%ct8[1e-006]\">%" ------------------ Gruß Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
LiebGuck Mitglied
Beiträge: 14 Registriert: 29.11.2017 AutoCad 2016
|
erstellt am: 29. Nov. 2017 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für tunnelbauer
Hallo Ja, ich weiß, der Beitrag ist schon älter, aber vielleicht liest ja doch jemand noch hier mit. Ich probiers halt mal. Also ich arbeite mit AutoCad 2016, hatte selbst eine Lisp von einem Freund, welche Längen und Flächen mit Schriftfeldern beschriftete. Da ich Lisp leider selber nicht verstehe, sondern nur anwende, war ich nun ziemlich aufgeschmissen, als ich nun nach ein paar Jahren wieder mit AutoCad arbeite und diese Lisp nicht mehr funktioniert. Habe hier um Hilfe gesucht und diesen Beitrag gelesen. Aber .... auch das hier funktioniert nicht, es wird nur ein Mtext mit diesen #### Inhalt gezeigt, sowie auch bei meiner Lisp. Wisst ihr woran es liegen kann? Was denn zum Umschreiben wäre? Lieben Gruß LiebGuck Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jörg.jwd Ehrenmitglied V.I.P. h.c. CAD-PDM Administrator
Beiträge: 3109 Registriert: 05.11.2003
|
erstellt am: 29. Nov. 2017 12:11 <-- editieren / zitieren --> Unities abgeben: Nur für tunnelbauer
|
infiel_thomas Mitglied Rentner
Beiträge: 140 Registriert: 06.07.2005 Win7 64bit MAP 3D 2010 SP2 MAP 3D 2014 SP1 QGIS
|
erstellt am: 29. Nov. 2017 12:19 <-- editieren / zitieren --> Unities abgeben: Nur für tunnelbauer
|
LiebGuck Mitglied
Beiträge: 14 Registriert: 29.11.2017 AutoCad 2016
|
erstellt am: 29. Nov. 2017 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für tunnelbauer
|
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 sw: Win7-x64 Office 365 ProPlus C3D (& LT ) ET; DACH; Extensions ------------------- hw: FX3800 i5 CPU 670 8GB RAM
|
erstellt am: 29. Nov. 2017 12:57 <-- editieren / zitieren --> Unities abgeben: Nur für tunnelbauer
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist! Eben. Und damals gab es dieses 64bit-Gedöns noch nicht Hintergrund des Gartenzauns ist die andere ObjectID, die seit x64 aufgerufen wird. Ergänze/ändere den code wie folgt:
Code: (defun Get-ObjectIDx64 (obj / util) (setq util (vla-get-Utility (vla-get-activedocument (vlax-get-acad-object)))) (if (= (type obj) 'ENAME) (setq obj (vlax-ename->vla-object obj)) ) (if (= (type obj) 'VLA-OBJECT) (if (> (vl-string-search "x64" (getvar "platform")) 0) (vlax-invoke-method util "GetObjectIdString" obj :vlax-False) (rtos (vla-get-objectid obj) 2 0) ) ) ) (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 Object(%<\\_ObjId " (itoa objID ) ">%).Length \\f \"%lu2%pr2\">%" ) ) ;;Create the MTEXT entity containing the field. (vla-addMText *model-space* ip width str) )
Sollte tun. Danke u.a. an wronzky, von dem ich diese Zeilen geklaut und verwurstelt habe. HTH PS: Herzlich willkommen im Forum! Wichtige Links für den problemlosen Einstieg: sinnvoll fragen | CAD.de-Hilfe | Nettiquette | Forensuche | Funktionsweise des Filters | Syntax der CAD.de Suche Bitte füll bei Gelegenheit Deine System-Info aus, die hilft uns, Dir zu helfen. ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
LiebGuck Mitglied
Beiträge: 14 Registriert: 29.11.2017 AutoCad 2016
|
erstellt am: 29. Nov. 2017 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für tunnelbauer
Toll, hab das was ich eigentlich brauche, wenn ich jetzt noch lisp programmieren könnte, könnte ich es noch etwas auf meine Bedürnisse zu schneiden. Zwei Kommastellen und ein m² bzw. m danch wäre mir noch recht. ABER vielen Dank für die wirklich brauchbaren und tollen Tipps - an euch beide. Lieben Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
LiebGuck Mitglied
Beiträge: 14 Registriert: 29.11.2017 AutoCad 2016
|
erstellt am: 29. Nov. 2017 13:12 <-- editieren / zitieren --> Unities abgeben: Nur für tunnelbauer
|
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 sw: Win7-x64 Office 365 ProPlus C3D (& LT ) ET; DACH; Extensions ------------------- hw: FX3800 i5 CPU 670 8GB RAM
|
erstellt am: 29. Nov. 2017 13:19 <-- editieren / zitieren --> Unities abgeben: Nur für tunnelbauer
|