| |
| 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: textfield in attribut (2346 mal gelesen)
|
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: 03. Feb. 2010 09:04 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich möchte gern die Abfrage textfield an ein Attribut in einem Block "layer-area" übergeben. Mit der beigefügten function ist es möglich die Ausgabe in einen MTEXT auszuwerfen. Mein Problem, mit den ActiveX-functions habe ich noch nicht die volle Kontrolle (Beispiel kann ich nicht die Variable obj abfragen, wo vermutlich der Flächenwert steht). Hier ist der angepasste Ansatz von Dorfy, den ich ein bissel umgestrickt habe bezüglich eines area-objekts (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)) ) ) ;;select aws (setq aws (ssget '((0 . "LWPOLYLINE")))) (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) ">%).area \\f \"%lu2%pr2\">%" ) ) ;;Create the MTEXT entity containing the field. (vla-addMText *model-space* ip width str) ) Grüsse cp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Feb. 2010 09:25 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zunächst sollte man nochmal eindeutig klären was du willst: Hast du eine BlockREFERENZ(INSERT) an der bereits ein Attribut "klebt" und möchtest nur noch den Attributwert hinzufügen oder möchtest du der Blockreferenz ein zusätzliches Attribut hinzufügen (mit deinem gewünschten Textwert) ? Und falls es die Vermutung 2 ist: Was soll mit der Blockdefinition geschehen, soll diese ebenfalls eine zusätzliche Attributdefinition erhalten oder nicht ? ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) 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: 03. Feb. 2010 09:34 <-- editieren / zitieren --> Unities abgeben:
ich habe bereits einen Block "layer-area" definiert, nach dem beigefügtem Muster 1.Attribut: für den layer, wo die LWPL befindet 2.Attribut: für die Flächegrösse, die mittels textfield übergeben werden soll (dyn. beibehalten)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Feb. 2010 10:02 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Der Flächenwert interessiert dich doch nicht, den liest später das Textfeld von selbst aus, du benötigst nur die ObjectID welche das Programm ja bereits aus der Polylinie holt. Dazu brauchst du noch den Layer der Polylinie wenn ich das richtig verstehe ? => (vla-get-layer obj) [EDIT: Den Layer lässt du aber doch auch über ein Textfeld auslesen, oder?] Das einzige was du jetzt noch benötigst ist der Programmteil in dem steht "füge diese Daten in ObjektX ein", wobei "X" einmal das 1.Attribut. Um da ran zu kommen gibt es mehrere Möglichkeiten: Du pickst die Attribute (dafür mußt du 2x eine Objektwahl vornehmen und zudem müssen die Attribute sichtbar sein) oder du wählst die Blockreferenz und das Programm ermittelt die entsprechenden Attribute selbst.
Version2 -> Ob die Blockreferenz automatisch ermittlet werden kann, kann ich nicht beurteilen - habe mir die DWG aber auch nicht angesehen muß ich zugeben. Frage: Wie ermittelst du denn die Blockreferenzen bzw. Attribute die bearbeitet werden sollen ? ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) [Diese Nachricht wurde von cadffm am 03. Feb. 2010 editiert.] 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: 03. Feb. 2010 10:54 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
hi, ... ... Code: ... ;;Create the MTEXT entity containing the field. ;(vla-addMText *model-space* ip width str) (setq BlkNme "layer-area" bp pt Xscale 1 Yscale 1 Rot 0 tag2 (strcat(vla-get-layer obj)) tag1 str);(strcat(rtos(vla-get-area obj)2 2)) (command "_.Insert" BlkNme bp Xscale Yscale Rot tag1 tag2) )
... ------------------ 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: 03. Feb. 2010 11:06 <-- editieren / zitieren --> Unities abgeben:
genau das ist die Frage: Kann die BLOCKRREFERENZ (Attribut "area") auch wie beim MTEXT-REFERENZ ausgeworfen werden ? Ich mag diese Kopplung zwischen MTEXT-referenz <-> Objekt LWPLOLYLINE Rein manuell ist es möglich wie die block.dwg verdeutlicht die Kopplung aufzubauen zwischen BLOCKRREFERENZ <-> LWPLOLYLINE Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Feb. 2010 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Es ist für mich recht schwer deinen Worten zu folgen und wie DU die Blockreferenz ermitteln willst ist mir ja immer noch nicht klar ! Händisch ? via Programm ? (bekommst du das hin?) Setzt du die Blockreferenz erst ab (dann siehe Dorfy) oder gibt es die bereits und du somit möchtest Attributwerte editieren ? Soll jetzt irgendwo noch ein Mtext(mit Feld) erstellt werden oder was ist los ? Vorschlag, schreibe nochmal genau deinen IST-Stand(Zeichnung) und deinen Soll-Stand(Zeichnung). ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) 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: 03. Feb. 2010 12:33 <-- editieren / zitieren --> Unities abgeben:
Hi nochmal! Um meinem Gedankengang besser folgen zu können, bitte ich Euch gern mal die block.dwg zu öffnen, diese enthält 3 Objekte. -geschlossener pline -mtext mit textfield-kopplung zum pline -block namens "layer-area" mit 2 Attributen für Layername und Flächengrösse mit textfield-kopplung zum pline Die Funktion "lnkfld" geht bestens, um ein mtext-objekt zu bedienen Ich benötige gleiche Funktion, um ein Attribut in einem Block zu bedienen. Ein Vorteil ist: wenn man den pline in seiner Grösse ändert, ändert sich auch die Angabe der Flächengrösse - das finde ich klasse (dynamisch). PS: es lässt sich für mich genau prüfen in welcher Variable die Flächengrösse steht, tippe mal auf var objID cp
[Diese Nachricht wurde von cadplayer am 03. Feb. 2010 editiert.] 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: 04. Feb. 2010 01:47 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo cadplayer, den Code habe ich mir nicht weiter angesehen. Fakt ist allerdings, dass zu Beginn weder die Blockreferenz Kenntnis von der zugehörigen Polyline hat und umgekehrt die Polyline auch nicht, wohin diese verlinkt ist. Daher gibt es auch nur einen Weg: 1. Polyline wählen 2. Blockreferenz wählen (oder alternativ, Blockreferenz einfügen) Bist du soweit, dann sind dir also beide Elemente bekannt. Nun musst du noch die Attribute ermitteln. ... und den gleichen Text, wie dieser in das MText-Element geschrieben wird, in das entsprechende Attribut schreiben. - fertig. Bei Fragen ... Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. 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: 04. Feb. 2010 06:54 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer:
Die Funktion "lnkfld" geht bestens, um ein mtext-objekt zu bedienen Ich benötige gleiche Funktion, um ein Attribut in einem Block zu bedienen.
Hi, cadffm fragte bereits wie dein Block eingefügt wird bzw ob er schon an Ort und Stelle liegt?! Hast du die Zeilen die ich oben gebracht habe mal in den Code eingebaut und probiert? Ach, und die Flächengröße wird "vom Feld ermittelt" (...area...), alternativ siehe oben gebrachte Zeilen, hinter tag1... So, nu aber mal die Fragen beantworten und mal probieren ------------------ 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: 04. Feb. 2010 08:56 <-- editieren / zitieren --> Unities abgeben:
|