Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  verschachtelte Blockreferenzen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  verschachtelte Blockreferenzen (4632 mal gelesen)
chrimo
Mitglied



Sehen Sie sich das Profil von chrimo an!   Senden Sie eine Private Message an chrimo  Schreiben Sie einen Gästebucheintrag für chrimo

Beiträge: 13
Registriert: 03.05.2004

erstellt am: 03. Mai. 2004 14:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 03. Mai. 2004 14:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 03. Mai. 2004 14:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

wenn ich ein einer Referenz ein Element (außer Attribut) ändere, ändert sich das in allen Referenzen

------------------
- Thomas -

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 03. Mai. 2004 15:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 03. Mai. 2004 15:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von chrimo an!   Senden Sie eine Private Message an chrimo  Schreiben Sie einen Gästebucheintrag für chrimo

Beiträge: 13
Registriert: 03.05.2004

erstellt am: 04. Mai. 2004 11:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 04. Mai. 2004 11:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von chrimo:

(Analog zum Ändern der Attribute, geht also nicht?)


Richtig! Nur Attribute sind veränderliche Elemente einer Blockreferenz (INSERT's).

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

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


Sehen Sie sich das Profil von gmk an!   Senden Sie eine Private Message an gmk  Schreiben Sie einen Gästebucheintrag für gmk

Beiträge: 667
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von chrimo an!   Senden Sie eine Private Message an chrimo  Schreiben Sie einen Gästebucheintrag für chrimo

Beiträge: 13
Registriert: 03.05.2004

erstellt am: 06. Mai. 2004 15:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 06. Mai. 2004 15:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 07. Mai. 2004 08:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 07. Mai. 2004 14:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von chrimo an!   Senden Sie eine Private Message an chrimo  Schreiben Sie einen Gästebucheintrag für chrimo

Beiträge: 13
Registriert: 03.05.2004

erstellt am: 09. Mai. 2004 14:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Wilfried Nelkel an!   Senden Sie eine Private Message an Wilfried Nelkel  Schreiben Sie einen Gästebucheintrag für Wilfried Nelkel

Beiträge: 804
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 13. Mrz. 2018 09:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

Axel kann dir leider nicht mehr antworten. RIP!
Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Wilfried Nelkel
Mitglied
glaubt mir eh keiner


Sehen Sie sich das Profil von Wilfried Nelkel an!   Senden Sie eine Private Message an Wilfried Nelkel  Schreiben Sie einen Gästebucheintrag für Wilfried Nelkel

Beiträge: 804
Registriert: 15.03.2001

erstellt am: 13. Mrz. 2018 09:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 13. Mrz. 2018 09:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Wilfried Nelkel an!   Senden Sie eine Private Message an Wilfried Nelkel  Schreiben Sie einen Gästebucheintrag für Wilfried Nelkel

Beiträge: 804
Registriert: 15.03.2001

erstellt am: 13. Mrz. 2018 10:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 13. Mrz. 2018 10:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 13. Mrz. 2018 10:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich


(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


Sehen Sie sich das Profil von Wilfried Nelkel an!   Senden Sie eine Private Message an Wilfried Nelkel  Schreiben Sie einen Gästebucheintrag für Wilfried Nelkel

Beiträge: 804
Registriert: 15.03.2001

erstellt am: 13. Mrz. 2018 10:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für chrimo 10 Unities + Antwort hilfreich

Leute, Ihr seid der Hammer... Dankeschön. 


------------------
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

chrimo
Mitglied



Sehen Sie sich das Profil von chrimo an!   Senden Sie eine Private Message an chrimo  Schreiben Sie einen Gästebucheintrag für chrimo

Beiträge: 13
Registriert: 03.05.2004

erstellt am: 14. Mrz. 2018 12:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz