| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Eplan > ACAD Blockdefinition (1198 mal gelesen)
|
rabu Mitglied
Beiträge: 4 Registriert: 17.06.2005
|
erstellt am: 18. Jun. 2005 21:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich bin neu im Forum und hoffe das mir jemand weiterhelfen kann. Ich habe die Anforderung, Stromlaufpläne die nach dem Export nach DWG im Plottrahmen positionierte Texte enthalten, in einen Block mit Attributen automatisiert zu wandeln. Die in der Zeichnung enthaltenen Symbole sind schon korrekt gewandelt. Die Texte , Einträge werden immer auf den gleichen Koordinaten stehen. Für eure Hilfe wäre ich sehr dankbar!!! Gruß Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, Monitore, ...
|
erstellt am: 19. Jun. 2005 00:24 <-- editieren / zitieren --> Unities abgeben: Nur für rabu
Eigentlich ist die Aufgabenstellung nur schnell und fehlerfrei mit einem auf deine Anforderungen perfekt angepasstem Lisp realisierbar. Falls du Lisp kannst, könntest du dieses Lisp (nur das Grundprinzip wird dort gezeigt, keine Musterlösung und sowieso nur ein Webfind) entsprechend deiner Aufgabenstellung anpassen: Code:
(defun dxf (code ename) (cdr (assoc code (entget ename))) ) ;_ end of defun (defun text2att (/ block-exists blockname btble ss) (setq block-exists t) (while block-exists (setq blockname (getstring "Neuer Blockname: ")) (setq btble (tblsearch "BLOCK" blockname)) (if btble (progn (setq block-exists t) (prompt "\nBlock bereits vorhanden, anderen Namen wählen: ") ) ;_ progn (progn (setq block-exists nil) ) ;_ progn ) ;_ if ) ;_ while (setq ss nil) (prompt "\nD-Text(e) wählen : ") (while (= ss nil) (setq ss (ssget '((0 . "TEXT")))) (if (= ss nil) (prompt "\nKeine D-TEXTE ausgewählt, nochmal: ") ) ;_ if ) ;_ while (if ss (progn (make-attributes ss blockname) ) ;_ progn ) ;_ if ) ;_ text2att (defun make-attributes (ss blockname / i tmsg pmsg t-str p-str en ins-pt txt-ht txt-str txt-style lyr btble) (setq i (- 1) tmsg "\nAttribute Tag: " pmsg (strcat "\nPrompt des Attributes wählen (ENTER " "falls wie der Attributname): " ) ;_ strcat t-str (getstring tmsg) p-str (getstring t pmsg) ) ;_ setq (repeat (sslength ss) (setq en (ssname ss (setq i (1+ i))) ins-pt (dxf 10 en) txt-ht (dxf 40 en) txt-str (dxf 1 en) txt-style (dxf 7 en) lyr (dxf 8 en) ) ;_ setq ;;; **************** Make the block ************ (setq btble (tblsearch "BLOCK" blockname)) (if (= btble nil) (progn (entmake (list '(0 . "BLOCK") '(100 . "AcDbEntity") (cons 8 lyr) '(100 . "AcDbBlockBegin") (cons 2 blockname) '(70 . 2) (cons 10 ins-pt) ) ;_ list ) ;_ entmake (entmake (list '(0 . "ATTDEF") '(100 . "AcDbEntity") '(67 . 0) (cons 8 lyr) '(100 . "AcDbText") (cons 10 ins-pt) (cons 40 txt-ht) '(1 . "") (cons 7 txt-style) '(100 . "AcDbAttributeDefinition") (cons 3 p-str) (cons 2 (strcase t-str)) '(70 . 0) ) ;_ list ) ;_ entmake (setq bname (entmake (list '(0 . "ENDBLK") '(100 . "AcDbEntity") (cons 8 lyr) '(100 . "AcDbBlockEnd") ) ;_ list ) ;_ entmake ) ;_ setq ) ;_ progn ) ;_ if ;;; *************** Insert the block ****** (entmake (list '(0 . "INSERT") '(100 . "AcDbEntity") (cons 8 lyr) '(100 . "AcDbBlockReference") '(66 . 1) (cons 2 bname) (cons 10 ins-pt) ) ;_ list ) ;_ entmake (entmake (list '(0 . "ATTRIB") '(100 . "AcDbEntity") (cons 8 lyr) '(100 . "AcDbText") (cons 10 ins-pt) (cons 40 txt-ht) (cons 1 txt-str) (cons 7 txt-style) '(100 . "AcDbAttribute") (cons 2 t-str) '(70 . 0) ) ;_ list ) ;_ entmake (entmake '((0 . "SEQEND"))) (entdel en) ) ;_ repeat (princ) ) ;_ make-attributes (defun c:tat () (text2att)) (prompt "\nMit TAT starten: ") ;|«Visual LISP© Format Options» (110 1 70 2 nil "Ende von " 100 45 0 0 0 T T nil T) ;*** DO NOT add text below the comment! ***|;
Falls nein solltest du einen der sich mit CODen auskennt damit beauftragen. ------------------ MfG Proxy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 19. Jun. 2005 08:36 <-- editieren / zitieren --> Unities abgeben: Nur für rabu
Hallo Ralf, im Grunde gibt es 2 Wege, deine Aufgabenstellung zu lösen. a) man definiert die Blöcke neu mit Attributen und aktualisiert alle Einfügungen mit dem Befehl BATTMAN. Bei der Attributerstellung sollte man darauf achten, dass diese einen Wert haben, damit man diese auswählen kann. Danach kopierst du die Texte in die Attribute. Dabei können die folgenden Zeilen helfen:
Code:
(defun c:Dt2AttVal (/ txt Att) (setq txt (car(entsel"\nTextobjekt wählen: "))) (setq Att (car(nentsel"\nZielattribut wählen: "))) (entmod (subst (assoc 1 (entget txt)) (assoc 1 (entget Att)) (entget Att) ) ) (entupd(cdr(assoc 330(entget Att)))) (princ) ) ;Starten mit Dt2AttVal
(das kann man natürlich noch soweit aufbohren, dass mehrere Texte auch mehrere Attribute füllen) b) Das Tool hängt automatisch einen Attributsatz an die bestehenden Blockreferenzen und füllt die Werte entsprechend der Texte. Diese Variante ist sehr stark abhängig von deinem Zeichnungsaufbau. Die immer gleichen Koordinaten wären hier schon mal ein Anhaltspunkt, damit das Tool die zum Insert gehörenden Texte automatisch sucht/findet. Grundsätzlich wäre hier Proxys-Codeansatz schon das Grundgerüst des Programmes. Bei Fragen ... Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Autodesk User Group Central Europe Individuelle Lösungen von Heute auf Morgen. AUGCE Manager Deutschland
[Diese Nachricht wurde von Brischke am 19. Jun. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rabu Mitglied
Beiträge: 4 Registriert: 17.06.2005
|
erstellt am: 20. Jun. 2005 06:00 <-- editieren / zitieren --> Unities abgeben:
Hallo Proxy, vielen Dank für deinen Hinweis. Leider kann ich kein Lisp und bin deshalb auf eine Komplettlösung angewiesen. Danke trotzdem, so bekomme ich auch mehr Einblick in das was und wie es gehen muesste. MfG Ralf
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rabu Mitglied
Beiträge: 4 Registriert: 17.06.2005
|
erstellt am: 20. Jun. 2005 06:10 <-- editieren / zitieren --> Unities abgeben:
|
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, Civil 3D, MAP 3D, ACADM Inventor AutoCAD 2022, AIP 4-2022 Win 10
|
erstellt am: 20. Jun. 2005 08:07 <-- editieren / zitieren --> Unities abgeben: Nur für rabu
Zitat: Original erstellt von rabu: Hallo Proxy,vielen Dank für deinen Hinweis. Leider kann ich kein Lisp [B]und bin deshalb auf eine Komplettlösung angewiesen...
Na, dann kann man sich so ein Programm doch bei einem geeigneten Programmierer bestellen. Anfrage nach kostenlosen individuellen Komplettlösungen geht für ein Forum eigentlich über die üblichen Hilfestellungen weit hinaus. ------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |