| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: verschachtelte Blockreferenzen (4673 mal gelesen)
|
chrimo Mitglied
Beiträge: 13 Registriert: 03.05.2004
|
erstellt am: 03. Mai. 2004 14:49 <-- editieren / zitieren --> Unities abgeben:
Hallo Habe verschachtelte Blockdeffinition, z.B. Block "Fen", in dem 2x der Block "Stock" vorkommt. Nach mehrfachem Einfügen von "Fen" möchte ich bei einer dieser Blockreferenzen die x-Skalierung von "Stock" ändern. Meine Frage: Wenn ich einen der eingefügten Blöcke auswähle (z.B. mit entsel), wie bekomme ich eine Liste aller darin enthaltenen Unterblöcke? (Egal wie tief sie verschachtelt sind?) wie bekomme ich z.B. alle Sub-Blöcke "Fen", auch wenn sie in verschiedenen Verschachtelungsebenen sind Grüße chrimo
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: 03. Mai. 2004 14:54 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
Hallo chrimo, Änderst du die Blockdefinition, dann ändert sich das in allen Blockreferenzen. Du kannst also nicht in nur einer einzigen Referenz den Skalierfaktor der darin verschachtelten Blockreferenz ändern. Willst du die Anzahlen, oder nur die Namen der darin verschachtelten Blöcke? Du musst in die Blockdefinition und darin eben die Namen der darin enthaltenen Inserts auslesen. Dann gehts du in die Blockdefinitionen dieser Blöcke und liest die darin verschachtelten Blöcke aus , usw usw Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 03. Mai. 2004 14:55 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 03. Mai. 2004 15:03 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
vielleicht hilft dir das hier wird in allen blöcken, und auch in allen subblöcken der block STOCK gesucht und kann mit entmode geändert werden (setq bl (tblnext "BLOCK" t)) (while bl (setq ename (tblobjname (cdr (assoc 2 bl)))) (while (setq ename (entnext ename)) (setq edate (entget ename)) (cond ((and (= (cdr (assoc 0 edate)) "INSERT") (= (cdr (assoc 2 edate)) "STOCK") ) ; hier musst du mit dem subblock STOCK irgendwas tun ) ) ) (setq bl (tblnext "BLOCK")) ) ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 03. Mai. 2004 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
noch was [zitat] Nach mehrfachem Einfügen von "Fen" möchte ich bei einer dieser Blockreferenzen die x-Skalierung von "Stock" ändern [/zitat] geht nicht, ein skalieren vom subblock stock in nur EINEM der eingefügten blöcke FENS geht nicht, der skalierte block stock wird in ALLLEN besteheden, und zukünftigen blöcken (eigentlich einfügungen) ersetzt ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
chrimo Mitglied
Beiträge: 13 Registriert: 03.05.2004
|
erstellt am: 04. Mai. 2004 11:38 <-- editieren / zitieren --> Unities abgeben:
Wollte folgendes: Ein Block für Fenster --> "Fen" mit Sub-Block "Stock" (Fensterstock). "Fen" mehrfach einfügen, mit gleicher Skalierung (alle Fenster sind gleich groß), jedoch mit unterschiedlichen Stockdimensionen. Dazu wollte ich jeweils die Skalierung von "Stock" ändern. (Analog zum Ändern der Attribute, geht also nicht?) Grüße chrimo 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. Mai. 2004 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
|
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 669 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 04. Mai. 2004 13:33 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
mach dir einen block aus den blöcken fen und stock. dann einfügen, zerstören und stock skalieren. wenn du fen und stock jetzt als einheit betrachten möchtest, hängen sie zumindest in der datenbank hintereinander. "(SETQ stock (entnext fen))". ciao georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
chrimo Mitglied
Beiträge: 13 Registriert: 03.05.2004
|
erstellt am: 06. Mai. 2004 15:04 <-- editieren / zitieren --> Unities abgeben:
Möchte eine Einheit zu bilden (gmk - georg: "(SETQ stock (entnext fen))".) Möchte aber, dass es dauerhaft bleibt Was mir dazu einfällt: Anonymer Block oder Acad-Befehl "Gruppe" - unbenannt Was glaubt ihr, ist besser? z.B. Stabilität von ACAD, wenn es dann sehr viele dieser Einheiten, gibt. Kann man eine Gruppe ähnlich wie einen Block mit Lisp sezieren? Kann man eine Gruppe direkt (entmake ...) erzeugen? Grüße Chrimo 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: 06. Mai. 2004 15:14 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
Jetzt wird es schwierig für das praktische Handling und auch die Sicherstellung, dass die Auswertung am Ende auch das bringt, was gezeichnet wurde. Es ist also ein Zusammenhang herzustellen. Das kann man egal, ob mit Block oder mit einer Gruppe lösen. Was ist aber dann, wenn ein Bearbeiter eines auflöst kopiert usw? Dann ist der Zusammenhang weg, so dass ich keine dieser Lösungen favorisieren würde. Den Zusammenhalt würde ich über die erweiterten Elementdaten oder ein Dictionary realisieren. Dass dann mit einem/mehreren Reactoren derart überwachen, dass jede Action an einem Element das andere nachzieht. Wenn also ein Fen gelöscht wird, dann wird der Stock auch gelöscht, usw. Ansonsten steckst du sehr viel Mühe in ein solches Tool und der praktische Nutzen ist nahe Null. Bin aber auch gespannt, was andere hier an möglichen Lösungen / Ansätzen haben. Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 06. Mai. 2004 20:32 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
Ich finde, dass das hier ziemlich am zur Diskussion gestellten Problem vorbeigeht. Die eigentliche Frage nochmal zur Wiederholung: > Wenn ich einen der eingefügten Blöcke auswähle (z.B. mit entsel), wie bekomme ich eine Liste aller darin enthaltenen Unterblöcke? (Egal wie tief sie verschachtelt sind?) Die kriegt man z.B. so:
Code:
(defun get-subinserts(insert / subinserts ent) (setq subinserts(list insert)) (setq ent(cdr(assoc -2(tblsearch "block"(cdr(assoc 2(entget insert))))))) (while ent (if(="INSERT"(cdr(assoc 0(entget ent)))) (setq subinserts(append subinserts(list(get-subinserts ent)))) ) (setq ent(entnext ent)) ) subinserts )
Das ist nichts weiter als ein rekursiver Ansatz. Angenommen, wir haben ein INSERT, das zwei Unter-Inserts enthält, die wiederum je drei Unter-Unter-Inserts enthalten, sieht die Rückgabe so aus (alle Elemente, die keine Inserts sind, werden ignoriert): Code:
(<Entity name: 7ef76150> (<Entity name: 7ef760e8> (<Entity name: 7ef76040> ) (<Entity name: 7ef76048> ) (<Entity name: 7ef76050> ) ) (<Entity name: 7ef76100> (<Entity name: 7ef76040> ) (<Entity name: 7ef76048> ) (<Entity name: 7ef76050> ) ) )
Möchte man keinen Baumstruktur, sondern nur eine 'flache' Liste als Rückgabe, ändert man diese Zeile so ab (ohne list): (setq subinserts(append subinserts(get-subinserts ent))) Jetzt aber zum Wesentlichen: Natürlich kann man die Skalierung einzeln steuern! Chrimo hat ja - ganz korrekt - gesagt, er möchte die Skalierung in den Blockreferenzen ändern. Und da spricht absolut nichts dagegen. Die Aussagen "Du kannst also nicht in nur einer einzigen Referenz den Skalierfaktor der darin verschachtelten Blockreferenz ändern" und "Nur Attribute sind veränderliche Elemente einer Blockreferenz" sind schlichtweg falsch! Ein Insert hat u.a. diese Gruppencodes: 41 X-Skalierung 42 Y-Skalierung 43 Z-Skalierung 50 Drehwinkel 44 X-Abstand 45 Y-Abstand 70 X-Zähler 71 Y-Zähler All diese CGs können im Insert geändert werden, ohne dass die Blockdefinition irgendwie tangiert wäre - jede Skalierung (41, 42, 43) wirkt sich nur auf dieses eine Insert aus und nicht auf andere! Ich halte den ursprünglich angesprochenen Weg durchaus für effektiv und sinnvoll. Hier mit Reaktoren usw. zu kommen, ist völlig oversized und macht AutoCAD sowieso nur zu einem Wackelpudding. Natürlich kann immer jemand einen Block auflösen - aber das hieße ja, gar keine Blöcke mehr zu verwenden, nur damit sie keiner auflösen kann. Vielleicht auch gar nix mehr zeichnen - irgendwer könnte das ja alles löschen! Also, Leute, bleibt mal auf dem Teppich! Gruß, Axel
------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... 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: 07. Mai. 2004 08:08 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
Zitat: Original erstellt von mapcar: ... Jetzt aber zum Wesentlichen: Natürlich kann man die Skalierung einzeln steuern! Chrimo hat ja - ganz korrekt - gesagt, er möchte die Skalierung in den Block[b]referenzen ändern. Und da spricht absolut nichts dagegen. Die Aussagen "Du kannst also nicht in nur einer einzigen Referenz den Skalierfaktor der darin verschachtelten Blockreferenz ändern" und "Nur Attribute sind veränderliche Elemente einer Blockreferenz" sind schlichtweg falsch! Ein Insert hat u.a. diese Gruppencodes:41 X-Skalierung 42 Y-Skalierung 43 Z-Skalierung 50 Drehwinkel 44 X-Abstand 45 Y-Abstand 70 X-Zähler 71 Y-Zähler All diese CGs können im Insert geändert werden, ohne dass die Blockdefinition irgendwie tangiert wäre - jede Skalierung (41, 42, 43) wirkt sich nur auf dieses eine Insert aus und nicht auf andere! ...[/B]
Hallo Axel, in obigen Punkt muss ich Dir insofern widersprechen, dass das nicht möglich ist, wenn dieser Insert innerhalb eines anderen Blockes verschachtelt ist. Dann ist dieser Insert mit all diesen Eigenschaften in der Blockdefinition 'gefangen' und kann eben nicht geändert werden. Gleiches trifft dann auch auf die in diesem Insert enthaltenen Attribute zu. Wenn ich die Aufgabenstellung richtig verstanden habe, dann ging es darum 2 Blöcke zu verschachteln, so dass der verschachtelte skalierbar bleibt. Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 07. Mai. 2004 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
Also, ich sehe da bisher kein Problem: Code:
;******* alles in eine Datei kopieren und nur laden ******* (defun get-subinserts(insert / subinserts ent) (setq subinserts(list insert)) (setq ent(cdr(assoc -2(tblsearch "block"(cdr(assoc 2(entget insert))))))) (while ent (if(="INSERT"(cdr(assoc 0(entget ent)))) (setq subinserts(append subinserts(get-subinserts ent))) ) (setq ent(entnext ent)) ) subinserts ); Erzeugt einen verschachtelten Testblock (defun mktestinsert( / ss le) (command"_circle"'(0 0)1) (setq le(entlast)) (command"_block""b1"'(0 0)(entlast)"") (command"_insert""b1"'(-2 0)"""""") (command"_insert""b1"'(-1 0)"""""") (command"_insert""b1"'(0 0)"""""") (command"_insert""b1"'(1 0)"""""") (command"_insert""b1"'(2 0)"""""") (command"_circle"'(0 0)3) (setq ss(ssadd)) (while le (ssadd le ss) (setq le(entnext le)) ) (command"_block""b2"'(0 0)ss"") (command"_insert""b2"'(0 0)"""""") ) ; modifiziert die X-Skalierung der Sub-Inserts (defun modtestinsert( / scale) (setq scale 1) (foreach subinsert(cdr(get-subinserts(entlast))) (entmod (subst (cons 41(setq scale(* scale 0.7))) (assoc 41(entget subinsert)) (entget subinsert) ) ) ) ) (setvar"expert"3); nur sicherheitshalber (mktestinsert) (modtestinsert) (command"_regen")
Warum sollte das nicht gehen? Gruß, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... 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: 07. Mai. 2004 14:11 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
Hallo Axel, wir reden aneinander vorbei. Sicher kann ich in einem Block B2 den Block B1 in verschiedenen Skalierungen haben. Ich kann aber nicht den Block B2 mehrfach in der Zeichnung eingefügt haben, und den in diesem befindlichen Block B2 in verschiedenen Skalierungen anzeigen lassen. Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 07. Mai. 2004 21:52 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
OK, Holger, jetzt habe auch ich verstanden, worum es dir geht. Da hast du Recht, auch wenn ich mit deinen Formulierungen nach wie vor nicht ganz einverstanden bin;-) Es geht also um ein mehrfaches Einfügen des äußeren Blocks mit unterschiedlichen Skalierungen des inneren Blocks. Das ist so nicht mehr machbar, da stimme ich dir zu - hatte dich einfach etwas falsch verstanden. Mal zur Lösung des Problems: Ich weiss ja nicht, in wie vielen Abstufungen diese Fenster vorkommen, aber das muss doch wohl eine endliche Anzahl von Varianten sein. Da wäre doch einfach ein kleines Variantenprogramm angesagt, was mal die ganze Palette durchzeichnet, dazu ein kleiner Auswahldialog, und fertig. Dann würde die Skaliererei ganz wegfallen. Gruß, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
chrimo Mitglied
Beiträge: 13 Registriert: 03.05.2004
|
erstellt am: 09. Mai. 2004 14:50 <-- editieren / zitieren --> Unities abgeben:
Die Fenster-Varianten sind unbeschränkt, da die Fenster in beliebigen Dimensionen vorkommen können und die Fensterstöcke auch noch verschieden skaliert sein können: Die einzelnen Blöcke werden in den verschiedenen Skalierungen eingefügt (Werden abgefragt, die Einstellungen des letzten Fensters werden in einer (globalen) Variable gespeichert und sind die Vorgaben für das nächste Fenster) wobei mir die Idee vom Georg, einen Block mit Unterblöcken einzufügen und nach dem Einfügen zu zerstören gut gefällt. Nachdem ihr mich von der Illusion befreit habt, dass bei mehrfachen Einfügungen eines Blockes die inneren Blöcke unterschiedlich skaliert werden können, gehts jetzt darum, die einzelnen Elemente eine Fensters zusammenzufassen. Tendiere zur Variante mit der unbenannten Gruppe (Beim Kopieren wird automatisch eine neue unbenannte Gruppe erstellt), Reaktoren brauch ich dazu auch nicht. Zu Holgers Einwand: Wenn jemand den Zusammenhang auflöst, sollte man ja annehmen, dass das eine bewußte Aktion ist und sozusagen die weitere Verantwortung übernommen wird. Funktionieren die Gruppen über Reaktoren (wegen ((-1 . <Objektname: 149d170> ) (0 . "GROUP") (5 . "2E") (102 . "{ACAD_REACTORS")...) und könnte man damit "irgenwas praktisches" machen ? Grüße Chrimo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001 AutoCAD/ADT/ACA 2002 - 2023, Hardware: HP Z620 Workstation, 2 x Xeon E5-2690 v2@3.00GHz, 96 GB RAM, NVIDIA Quadro RTX 4000, Windows 10-64bit ..... ATC-Trainer
|
erstellt am: 13. Mrz. 2018 09:37 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist! Hallo Axel, Deine Funktion GET-SUBNSERTS ist klasse. Aber ich bekomme es einfach nicht hin, die Liste mit den Namen der Blockdefinitionen anstand mit der Objekt-ID zu füllen. Was mach ich da falsch? ------------------ Schöne Grüsse Wilfried Nelkel CAD-Technik Nelkel GmbH http://www.cad-nelkel.de http://www.schulungshandbuch.de
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: 13. Mrz. 2018 09:41 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
|
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001
|
erstellt am: 13. Mrz. 2018 09:52 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist! Oh... das wusste ich nicht. Oh mei
------------------ Schöne Grüsse Wilfried Nelkel CAD-Technik Nelkel GmbH http://www.cad-nelkel.de http://www.schulungshandbuch.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 13. Mrz. 2018 09:55 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
Da die Funktion get-subinserts mit Elementnamen arbeitet, und sich selbst rekursiv aufruft, kann man diese nicht so leicht umbauen. AM einfachsten wäre, ein 2. Funktion darüber kapseln, die das Ergebnis in den Blocknamen wandelt.
Code:
(defun get-subinsertsBLName ( en ) (setq li nil) (foreach en (get-subinserts en)) (setq li (append li (list (cdr (assoc 2 (entget en)))))) ) li )
(get-subinsertsBLName (entlast))
ergibt dann ("b2" "b1" "b1" "b1" "b1" "b1") [Diese Nachricht wurde von fuchsi am 13. Mrz. 2018 editiert.] [Diese Nachricht wurde von fuchsi am 13. Mrz. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001
|
erstellt am: 13. Mrz. 2018 10:06 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist! Hallo Fuchsi, danke für den Hinweis. Irgendwo fehlt da eine Klammer. Wo würdest Du die Funktion "get-subinsertsBLName" denn in die Funktion "Get-Subinserts" einbauen?
------------------ Schöne Grüsse Wilfried Nelkel CAD-Technik Nelkel GmbH http://www.cad-nelkel.de http://www.schulungshandbuch.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 13. Mrz. 2018 10:08 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
Nicht IN die Funktion sondern ÜBER die Funktion Ja, da hat sich eein Klammerfehle reingeschlichen Code: (defun get-subinsertsBLName ( en ) (setq li nil) (foreach en (get-subinserts en) (setq li (append li (list (cdr (assoc 2 (entget en)))))) ) li )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 13. Mrz. 2018 10:09 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
(defun get-subinsertsblockname(INSERT / subinserts) (defun get-subinserts(insert / subinserts ent) (setq subinserts(list insert)) (setq ent(cdr(assoc -2(tblsearch "block"(cdr(assoc 2(entget insert))))))) (while ent (if(="INSERT"(cdr(assoc 0(entget ent)))) (setq subinserts(append subinserts(get-subinserts ent))) ) (setq ent(entnext ent)) ) subinserts ) (if(and(=(type insert)'ENAME) (=(cdr(assoc 0 (entget insert)))"INSERT") (setq subinserts (get-subinserts insert)) ) (mapcar '(lambda(X / Y)(if(and(setq Y(entget X))(setq Y(cdr(assoc 2 Y))))Y)) subinserts ) ) ) Aufruf mit (get-subinsertsblockname(car (entsel "\nBlockreferenz wählen : "))) ------------------ Also ich finde Unities gut ... und andere sicher auch --------------------------------------- - 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 |
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001
|
erstellt am: 13. Mrz. 2018 10:14 <-- editieren / zitieren --> Unities abgeben: Nur für chrimo
|
chrimo Mitglied
Beiträge: 13 Registriert: 03.05.2004
|
erstellt am: 14. Mrz. 2018 12:00 <-- editieren / zitieren --> Unities abgeben:
Kann mich dem Lob von Wilfried nur anschließen. Plage mich gerade auf einem c++-QT-Forum herum: Konkrete Antworten bekommt man nicht, so unter dem Motto: "Ich weiß es, aber ich sage es Dir nicht. Folge den Andeutungen des Wissenden und bemühe dich." LG chrimo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |