| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Übernehmen der Fläche einer Polylinie in das Schriftfeld (in einem Attributblock) (6504 mal gelesen)
|
fzs600 Mitglied
Beiträge: 2 Registriert: 22.03.2007
|
erstellt am: 22. Mrz. 2007 08:40 <-- editieren / zitieren --> Unities abgeben:
Übernehmen der Fläche einer Polylinie in das Schriftfeld (in einem Attributblock) Haben bereits eine LISP die in die richtige Richtung geht: (defun c:fl_att (/ pl att fl) (setq pl (car(entsel "\nPolygon wählen: ")) att (car(nentsel "\nZielattribut wählen: ")) fl (vlax-get-property (vlax-ename->vla-object pl) 'Area ) ) (entmod (subst (cons 1 (rtos fl 2 2)) (assoc 1 (entget att)) (entget att) ) ) (entupd (cdr(assoc 330 (entget att)))) (princ) ) Jedoch wird dabei einfach nur der Wert der Fläche in das Attribut (Schriftfeld wird dabei überschrieben) geschrieben ich bräuchte aber die Lisp so modifiziert: - Polylinie wählen - Wert der Polylinie soll in das zu wählende Attribut als Schriftfeld übernommen werden - damit das Schriftfeld mit der Polylinie verknüpt ist - Schriftfeldformatierung sollte: Dezimal, Genauigkeit 0.00, Suffix m², Umwandlungsfaktor 0.0001 sein. Wäre toll wenn jemand sich dem Problem annehmen könnte! TX FZS 600 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: 22. Mrz. 2007 09:01 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
|
Apply2CAD Mitglied
Beiträge: 9 Registriert: 05.04.2005
|
erstellt am: 22. Mrz. 2007 11:39 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Felder werden als AcDbDictionary angehängt z.B.: Code:
AcDbText 1)-> AcDbDictionary 1.1)-> AcDbField
Folgende GC's finden sich dann am AcDbField z.B.:
Code:
0 FIELD 5 195 102 {ACAD_REACTORS 330 69318296;0 102 } 330 69318296;0 100 AcDbField 1 _text 2 %<\_FldIdx 0>% 4 90 1 360 69317632;0 97 0 91 63 92 0 94 9 95 2 96 0 300 93 1 6 ACFD_FIELDTEXT_CHECKSUM 93 2 90 2 140 3522 94 0 300 302 304 ACVALUE_END 7 ACFD_FIELD_VALUE 93 3 90 0 91 0 94 0 300 302 304 ACVALUE_END 301 98 0
Mit der Acad-Doku sollten dann die Werte auch in Lisp anzusprechen sein. Viel Glück. Ralph [Diese Nachricht wurde von Apply2CAD am 22. Mrz. 2007 editiert.] [Diese Nachricht wurde von Apply2CAD am 22. Mrz. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fzs600 Mitglied
Beiträge: 2 Registriert: 22.03.2007
|
erstellt am: 22. Mrz. 2007 14:17 <-- editieren / zitieren --> Unities abgeben:
Danke vorerst für die Antworten! Steh da aber trotzdem noch an! Noch mal von vorn... Für mich wäre es wichtig den Block mit Attributen (davon der Flächenwert als Schriftfeld) mehrfach zu kopieren und den einzelnen Blöcken (sprich dem Schriftfeld im Attribut bzw. Block) später unterschiedliche Polylinien zuzuweisen! Der Block sollte z.B. so aussehen: ZIMMER ...Attribut LAMINAT ...Attribut 12.56m² ...Attribut->Schriftfeld -> sollte später mit LISP-Programm einer Polylinie zugewiesen werden An Ralph: Danke noch mal - hab leider noch immer keinen Plan - bin LISP-technisch ein echter NOOB! MfG FZS 600 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Apply2CAD Mitglied
Beiträge: 9 Registriert: 05.04.2005
|
erstellt am: 23. Mrz. 2007 11:12 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Hallo FZS 600, sieht nach Raumstempel aus. Für das Problem gibt es schon fertige Lösungen und man muss nicht mehr das Rad neu erfinden. Z.B. wäre das Produkt "areamanager fm" der Fa. modulCAD (Vertrieb über www.Abcom-online.de) für "AutoCAD-pur" zu nennen. Der ADT stellt ähnliche Lösungen bereit. Für einen "reinen" Programmierer gehört das Erarbeiten solcher Lösungen zum Kerngeschäft. Der Programmierer würde u.U. das Ganze mit eigenen Reaktoren lösen. Für CAD-Anwender ist es oft leichter und letztendlich günstiger auf kommerzielle Produkte zurück zu greifen. Die "Felder" (=Reaktoren/Events) in AutoCAD sind leider nicht für alle Probleme gleich gut geeignet, insbesondere die Objekteigenschaften. Speziell die Objekteigenschaften sind zurzeit meiner Meinung nach etwas hölzern in der Anwendung und werden vielleicht in den kommenden AutoCAD-Versionen komfortabler. Weiterhin viel Glück _________ Ralph Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dabrunz Mitglied
Beiträge: 127 Registriert: 28.05.2003
|
erstellt am: 23. Mrz. 2007 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Tag zusammen. Manchmal gucke ich ja doch (noch) hier rein und finde immer wieder interessante Beiträge, wie den hier und da hätte ich auch gleich mal eine Idee von der Anzeige im Field-Dialog abgekupfert. Den Code von fzs600 (<- was ein Name) habe ich gleich mal angepasst: Zitat: Original erstellt von fzs600:(defun c:fl_att (/ pl att fl) (setq pl (car(entsel "\nPolygon wählen: ")) att (car(nentsel "\nZielattribut wählen: ")) ;** geloescht ** ) (entmod (subst (cons 1 (:field-makeObjectRefText(vlax-ename->vla-object pl)'Area)) (assoc 1 (entget att)) (entget att) ) ) (entupd (cdr(assoc 330 (entget att))));** <- gefaehrlich (princ) )
Hier die recht handwerkliche, aber dafür einfache Lösungs-Idee: Code:
(defun :field-makeObjectRefText (#object #property / ) (if (vlax-property-available-p #object #property) (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa(vla-get-ObjectID #object)) ">%)." (vl-princ-to-string #property) ">%" ) (strcat "##"(vl-princ-to-string #object)"."(vl-princ-to-string #property)"##") ) )
Achim Dabrunz
------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wolfgang Kirsch Mitglied Büroberater
Beiträge: 41 Registriert: 29.04.2002
|
erstellt am: 03. Mai. 2009 20:28 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Hallo, habe nach einigem Hängen und Würgen die codeschnippsel zusammengefügt: Code: (defun c:fl_att (/ pl att fl) (setq pl (car(entsel "\nPolygon wählen: ")) att (car(nentsel "\nZielattribut wählen: ")) ;** geloescht ** ) (entmod (subst (cons 1 (:field-makeObjectRefText(vlax-ename->vla-object pl)'Area)) (assoc 1 (entget att)) (entget att) ) ) (entupd (cdr(assoc 330 (entget att))));** <- gefaehrlich (princ) ) (defun :field-makeObjectRefText (#object #property / ) (if (vlax-property-available-p #object #property) (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa(vla-get-ObjectID #object)) ">%)." (vl-princ-to-string #property) ">%" ) (strcat "##"(vl-princ-to-string #object)"."(vl-princ-to-string #property)"##") ) )
Das funktioniert auch ganz wunderbar, für mich als Lisp-Laien, der sowas eigentlich nur Laden kann, stellen sich aber noch zwei Fragen:1) Wieso ist (entupd (cdr(assoc 330 (entget att))));** <- gefaehrlich? 2) Das Schriftfeld wird ohne Formatierung eingefügt, ich würde es gerne auf zwei Nachkommastellen begrenzen. Im Schriftfeld selbst ist da folgendes zu lesen: .Area \f "%lu6%qf1">% Ich schaffe es aber nicht, dieses irgendwie an den mit strcat erzeugten String dranzuhängen, hat irgendwer einen Tipp für mich? Grundsätzlich stimme ich Apply2CAD schon zu, aber die Preise von modulcad sind nicht gerade günstig, auch wenn es von den Features schon recht lecker ist. Mir wäre sehr geholfen damit, bequem einen Flächenstempel mit Werten zu füllen, mehr braucht es im Moment nicht. Es gibt dafür auch freie Software, z. B. die Kitox-Tools: http://www.kitox.com/kitoxtools_en.php ,leider sind die nur über Umwege anpassbar. So wie ich das sehe müsste erst mit den Tools die Fläche in den Block gebeamt werden und danach der Block um weitere Attribute erweitert werden... So schön das ist, aber die Tools bestehen i.G. aus einem einzigen VLX, und da ist es dann Essig mit Verstehen und Erweitern. Also wenn irgendwer hier im Forum einem Anfänger das Leben erleichtern möchte, ich würde mich sehr freuen! Freundliche Grüße Wolfgang Kirsch
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 04. Mai. 2009 08:14 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
|
Wolfgang Kirsch Mitglied Büroberater
Beiträge: 41 Registriert: 29.04.2002
|
erstellt am: 04. Mai. 2009 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Klasse cadwiesel, das war genau das was fehlte! Und superfix, da fängt die Woche ja gut an! Ich habe immer probiert das in die drittletzte Zeile einzubauen... Damit ist mir sehr geholfen, und beim Ausprobieren habe ich dann auch noch entdeckt wie leicht man den Umfang ermitteln kann Wenn es nicht stört, dann poste ich das mal:
Code:
;Überträgt den Umfang einer Polylinie in ein zu wählendes Blockattribut ;nach Forenbeiträgen auf www.cad.de ;Blockattribut muss sichtbar sein, also am besten mit dummy-Wert versehen ; ;Thanx to cadwiesel :-) ; (defun c:um_att (/ pl att fl) (setq pl (car(entsel "\nPolygon wählen: ")) att (car(nentsel "\nZielattribut wählen: ")) ) (entmod (subst (cons 1 (:field-makeObjectRefText(vlax-ename->vla-object pl)'Length)) (assoc 1 (entget att)) (entget att) ) ) (entupd (cdr(assoc 330 (entget att))));** <- gefaehrlich (princ) ) (defun :field-makeObjectRefText (#object #property / ) (if (vlax-property-available-p #object #property) (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa(vla-get-ObjectID #object)) ">%)." (vl-princ-to-string #property) " \\f \"%lu2%pr2\>%" ;mit "prX" kann die Anzahl der Nachkommastellen eingestellt werden ) (strcat "##"(vl-princ-to-string #object)"."(vl-princ-to-string #property)"##") ) )
Und hier noch der code für die Fläche:
Code:
;Überträgt die Fläche einer Polylinie in ein zu wählendes Blockattribut ;nach Forenbeiträgen auf www.cad.de ;Blockattribut muss sichtbar sein, also am besten mit dummy-Wert versehen ; ;Thanx to cadwiesel :-) ; (defun c:fl_att (/ pl att fl) (setq pl (car(entsel "\nPolygon wählen: ")) att (car(nentsel "\nZielattribut wählen: ")) ) (entmod (subst (cons 1 (:field-makeObjectRefText(vlax-ename->vla-object pl)'Area)) (assoc 1 (entget att)) (entget att) ) ) (entupd (cdr(assoc 330 (entget att))));** <- gefaehrlich (princ) ) (defun :field-makeObjectRefText (#object #property / ) (if (vlax-property-available-p #object #property) (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa(vla-get-ObjectID #object)) ">%)." (vl-princ-to-string #property) " \\f \"%lu2%pr2\>%" ;mit "prX" kann die Anzahl der Nachkommastellen eingestellt werden ) (strcat "##"(vl-princ-to-string #object)"."(vl-princ-to-string #property)"##") ) )
Schöne Woche Euch allen! Wolfgang Kirsch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bikerholic Mitglied Bauzeichner Straßenbau
Beiträge: 123 Registriert: 06.02.2009 XP Professional SP2 Intel Pentium x86 2.40GHz 1GB-Ram, Maxtor 60GB NVIDIA GeForce4 MX 420 mit 64MB AutoCAD 2005&2008&2010(Civil3D)+SP2+Expresstools google und ich san beste freunde ;)
|
erstellt am: 14. Sep. 2009 12:15 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
mahlzeit nettes tool doch irgendwie scheint es bei mir keine richtige lust zu haben den wert dann auch in das attribut zu übertragen denn es taucht dann nur #### auf habs in acad 2008 und 2010 ausprobiert beidesmal der gleiche fehler beim lisp laden steht in der befehlzeile: ":FIELD-MAKEOBJECTREFTEXT" hat es vieleicht damit etwas zu tun das das lisp nicht nichtig geladen wird? gruß björn ------------------ Wenn Arbeit etwas schoenes und erfreuliches waere, haetten die Reichen sie nicht den Armen ueberlassen. [Paul Lafargue] [Diese Nachricht wurde von bikerholic am 14. Sep. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wolfgang Kirsch Mitglied Büroberater
Beiträge: 41 Registriert: 29.04.2002
|
erstellt am: 14. Sep. 2009 13:24 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Das Lisp sollte eigentlich funktionieren. Wenn es beim Laden einen Fehler geben sollte, dann steht schon im Textfenster ein Hinweis. Aufgerufen wird das Lips mit "fl_att" bzw. "um_att". Die Lattenzäune sind normal, das ist so eine Eigenart bei Schriftfeldern. Einmal die Zeichnung regenerieren ( Konsoleneingabe: regen ) und dann steht auch der korekte Wert im Attribut. ciao Wolfgang Kirsch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bikerholic Mitglied Bauzeichner Straßenbau
Beiträge: 123 Registriert: 06.02.2009 XP Professional SP2 Intel Pentium x86 2.40GHz 1GB-Ram, Maxtor 60GB NVIDIA GeForce4 MX 420 mit 64MB AutoCAD 2005&2008&2010(Civil3D)+SP2+Expresstools google und ich san beste freunde ;)
|
erstellt am: 15. Sep. 2009 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Zitat: Original erstellt von Wolfgang Kirsch: Die Lattenzäune sind normal, das ist so eine Eigenart bei Schriftfeldern. Einmal die Zeichnung regenerieren ( Konsoleneingabe: regen ) und dann steht auch der korekte Wert im Attribut.
oooh man da hatte ich nicht dran gedacht aber schön das es für das problem solch eine einfache lösung gibt danke und nen schönen tag noch tschau björn ------------------ Wenn Arbeit etwas schoenes und erfreuliches waere, haetten die Reichen sie nicht den Armen ueberlassen. [Paul Lafargue] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wolfgang Kirsch Mitglied Büroberater
Beiträge: 41 Registriert: 29.04.2002
|
erstellt am: 15. Sep. 2009 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Zitat: Original erstellt von Wolfgang Kirsch: Das Lisp sollte eigentlich funktionieren.Wenn es beim Laden einen Fehler geben sollte, dann steht schon im Textfenster ein Hinweis. Aufgerufen wird das Lips mit "fl_att" bzw. "um_att". Die Lattenzäune sind normal, das ist so eine Eigenart bei Schriftfeldern. Einmal die Zeichnung regenerieren ( Konsoleneingabe: regen ) und dann steht auch der korrekte Wert im Attribut. ciao Wolfgang Kirsch
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lenny156 Mitglied Technischer Zeichner
Beiträge: 23 Registriert: 22.11.2005 AutoCad 2014 i7 quad / 8GB Win 7 64bit
|
erstellt am: 05. Nov. 2009 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 06. Nov. 2009 07:26 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Hi, ungetestet ... (entmod (subst (cons 1 (strcat(:field-makeObjectRefText(vlax-ename->vla-object pl)'Area) "lalülala")); <-----... ------------------ 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 |
H-kan84 Mitglied Konstrukteur Yachtinnenausbau
Beiträge: 253 Registriert: 28.07.2006
|
erstellt am: 06. Nov. 2009 11:33 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Moin, Zitat: Hi, ungetestet ... (entmod (subst (cons 1 (strcat(:field-makeObjectRefText(vlax-ename->vla-object pl)'Area)"lalülala"));<-----
klappt super! aber wie geht das mit der Kommastelle genau? Code: ;mit "prX" kann die Anzahl der Nachkommastellen eingestellt werden
Gruß edith: hat sich erledigt!
------------------ Aus technischen Gründen befindet sich die Signatur auf der Rückseite dieser Nachricht! [Diese Nachricht wurde von H-kan84 am 06. Nov. 2009 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: 06. Nov. 2009 11:48 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Zitat: Original erstellt von H-kan84: aber wie geht das mit der Kommastelle genau? .. edith: hat sich erledigt!
Dann verrat es doch der Allgemeinheit! Manch einer sucht vllt. die Zeile in naher Zukunft! (rtos... ------------------ 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 |
H-kan84 Mitglied Konstrukteur Yachtinnenausbau
Beiträge: 253 Registriert: 28.07.2006
|
erstellt am: 06. Nov. 2009 11:56 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Aber sicher:-) Code: (vl-princ-to-string #property) " \\f \"%lu2%pr2\>%" <--------HIER! ;mit "prX" kann die Anzahl der Nachkommastellen eingestellt werden
Nun würde ich gern noch den Wert in Meter ausgeben. Dazu tüffel ich grad rum...aber bekomme es nicht hin:( aus einer anderen Lsp weiss ich das es hier mit geht: Zitat: (strcat (rtos (/ (getvar "area") 1000000) 2 1) "m²"))
kann wer helfen? ------------------ Aus technischen Gründen befindet sich die Signatur auf der Rückseite dieser Nachricht! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bikerholic Mitglied Bauzeichner Straßenbau
Beiträge: 123 Registriert: 06.02.2009 XP Professional SP2 Intel Pentium x86 2.40GHz 1GB-Ram, Maxtor 60GB NVIDIA GeForce4 MX 420 mit 64MB AutoCAD 2005&2008&2010(Civil3D)+SP2+Expresstools google und ich san beste freunde ;)
|
erstellt am: 06. Nov. 2009 12:39 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
@H-kan84 ^^wie du willst eine flächenangabe in meter ausgeben oder möchtest du die lengenangabe in meter ausgeben was wohl ehr sinn machen würde oder??? mahlzeit björn ------------------ Wenn Arbeit etwas schoenes und erfreuliches waere, haetten die Reichen sie nicht den Armen ueberlassen. [Paul Lafargue] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
H-kan84 Mitglied Konstrukteur Yachtinnenausbau
Beiträge: 253 Registriert: 28.07.2006
|
erstellt am: 06. Nov. 2009 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 07. Nov. 2009 19:37 <-- editieren / zitieren --> Unities abgeben: Nur für fzs600
Hi, dann bau dir doch mal dein Field zusammen und schau im Nachgang mal in den Code ...?!? könnte man folgendes sehen ... Code: \\f \"%lu2%pr3%ps[, lalülala]%ct8[1e-006]\">%"
... ------------------ 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 |