Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  objekte aus verschachtelten blöcken kopieren

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:  objekte aus verschachtelten blöcken kopieren (964 mal gelesen)
ritchie1
Mitglied



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

Beiträge: 25
Registriert: 10.10.2017

AutoCAD 2008, AutoCAD 2011

erstellt am: 18. Jul. 2018 20:02    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

guten abend,
wieder mal was kniffliges:

ich habe einen block, der wiederum einige sub-blöcke enthält.
alle blöcke haben - neben anderen layern auch - den layer "04-Kontur" - mit polylinien, linien, kreisen etc.

jetzt möchte ich gerne alle objekte des layers "04-Kontur" - egal ob auf block, sub-block oder sub-sub-block liegend - in einen neuen block (ohne zusätzliche blockverschachtelung) kopieren

hab mir das so vorgestellt:
rekursive funktion welche den block durchlauft und alle objekte auf dem layer "04-Kontur" in einen zwischenspeicher kopiert. trifft die funktion auf eine blockreferenz, wird wiederum der inhalt dieser blockreferenz auf objekte des layers "04-Kontur" durchsucht und in den zwischenspeicher geladen... - bis alle verschachtelten blöcke durchlaufen sind. (ca. 3-4 ebenen).
anschließend werden die objekte im zwischenspeicher in den modellbereich eingefügt und zu einen neuen block zusammengefasst.

funktioniert das so? hat da jemand ev. ein paar codeschnipsel oder inspirationen dazu?

freue mich über jeden denkanstoß

ritchie

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

rexxitall
Mitglied
Dipl. -Ing. Bau


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

Beiträge: 266
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 19. Jul. 2018 08: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 ritchie1 10 Unities + Antwort hilfreich

Moin  Rekursiv durch die Blockref hierarchie zu laufen bringt nix, da diese ja nur Verweise auf die eigentlichen Blöcke sind.
Aber du kannst na klar durch alle Blöcke direkt laufen
in etwa so:
dim newblock as acadblock
dim entitys() as acadentity
For each Block in thisdrawing.blocks
for each entity in block
if entity.layer ="willi" then
'geht am einfachsten kann man aber auch mit ner collection etc machen
handles=handles & " " entity.handle
end if
next
next

so nun hast du alle Handles von den Dinxen auf deinem Layer.
Nun verfrachtest du die in ein entity array und kopierst dieses in den neuen Block.
ich mach das immer in ner for next schleife mit nem array welches nur ein element hat.-> dim entitys(0). Das dauert zwar etwas länger nur ist robuster fals so entity schon in dem Block ist etc.

dim SENTS() as string
senst=split(handles)
for i= lbound(sents) to ubound(sents)
set entitys(0)=getentitybyhandle(sents(i))
sents nun in Block kopieren.. hab ich gerade auswendig nicht aufm Schirm siehe F1 Taste Block definieren
next

Der Haken an der Nummer ist der, das die ganzen Subblöcke ja translatiert, verschoben rotiert etc sind. selbst die Elemente in einem Block haben eine eigene Transformationsmatrix. Nun käme in der Tat die Rekursion ins Spiel um diese Translationen rückgängig zu machen.

Aber für deinen Fall geht das einfacher.
Kopiere alle Blockreferenzen die auf dem Modelspace liegen.
Explodiere die alle rekursiv. Dabei wird die Rückwärtsauflösung der Verschiebungen etc. der Elemente automatisch gemacht.  Was an Elementen nicht auf dem gewünschten Layer liegt wird gelöscht. Was übrig bleibt wandert in den neuen Block. Ich meine mich aber auch zu entsinnen, das ich mal ne Routine hier gepostet hab, die Elemente zu einem Block hinzufügt ohne den Blockeditor zu bemühen oder den Nullpunkt eines Blockes neu setzt. Siehe dir die doch auch mal an  Lieben Gruß Thomas

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< for sale !

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