Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  ZNG nach allen Blöcken dursuchen

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:  ZNG nach allen Blöcken dursuchen (444 mal gelesen)
gerhard123
Mitglied
techn.Angestellter


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

Beiträge: 151
Registriert: 29.11.2007

erstellt am: 03. Mrz. 2009 16:39    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,

wie kann ich die komplette Zeichnung nach allen Blöcken (auch verschachtelten Blöcke) durchsuchen und den Namen und die Anzahl der der Blöcke zurückgeben, toll wäre es auch den Einfügepunkt zu von jedem Block auszulesen?

Vielleicht hat jemand schon ein ähnlichen Problem gelöst und könnte mir eine Codeauszug zu einem der Punkt zukommen lassen.


Vorab schon mal Danke.

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


Ex-Mitglied

erstellt am: 03. Mrz. 2009 16:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

hast Du auch was dazu? Code an dem Du gerade arbeitest?

Das mit den verschachtelten Blöcken ist mehr Aufwand (und fraglich, welche Aufgabe es betrifft, mir fehlt da in der Regel die Sinnhaftigkeit, wenn es sich nicht um XRef's handelt).
Und was hilft der Einfügepunkt, wenn das Layout dazu nicht bekannt ist?  

Ich schreib mal was (nur für ModelSpace, ohne Verschachtelung) und Du versuchst Dich weiter, bei Bedarf nochmals melden. Code nicht getestet, nur getipt:

Code:
Dim tEnt as AcadEntity
for each tEnt in ThisDrawing.ModelSpace
   if TypeOf tEnt is AcadBlockReference then
      debug.Print tEnt.Name               'da ist der Blockname
      debug.Print tEnt.InsertionPoint(0)  'das ist Einfügepunkt X
      debug.Print tEnt.InsertionPoint(1)  'das ist Einfügepunkt Y     
      debug.Print tEnt.InsertionPoint(2)  'das ist Einfügepunkt Z  
   End If
Next

Und wenn es grosse Zeichnungen sind, dann nicht durchscannen, sondern zuerst die BlockReferenzen in einem SelectionSet fangen und das dann durchgehen.

- alfred -

------------------
www.hollaus.at

[Diese Nachricht wurde von a.n. am 03. Mrz. 2009 editiert.]

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil
Inventor AIP 4-11, 2008 -2022
Win 10

erstellt am: 03. Mrz. 2009 17: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 gerhard123 10 Unities + Antwort hilfreich

Viele Codeschnipsel kann man sicher auch aus Wilfrieds genialem Blockinfo.dvb herauslesen/kopieren. http://autocad.cad.de/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=88&title=Blockinfo.dvb

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

gerhard123
Mitglied
techn.Angestellter


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

Beiträge: 151
Registriert: 29.11.2007

erstellt am: 04. Mrz. 2009 06:15    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 zusammen,

vorab schon mal Danke für eure Hilfe.

Ich pastle gerade an einem Typenkonfigurator. Die Blockinfos benötige ich um auf Daten aus dem ERP-System zugreifen zu können bzw. Die Daten in einer DB zu speichern.

Verschachtelte Blöcke deshalb, weil zB. ein Fachboden aus 2 Konsolen mit einer Artikelnummer=Blockname und einem Blechboden=Artikelnummer besteht

Annahme:
Block der eingefügt wird heisst zB.
Fachboden 100x40
  SubBlock1 123456 Konsole links
  Subblock2 123457 Konsole rechts
  SubBlock3 123458 Blechboden

Ich benötige nun die 6-stelligen Artikelnummen der Subblöcke.

Hoffe ich konnte es halbwegs erleutern was ich meine.

Lg.
Gerhard

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


Ex-Mitglied

erstellt am: 04. Mrz. 2009 07:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Gerhard,

zu Theorie:
in diesem Fall musst Du, nachdem Du eine BlockReferenz gefunden hast, die Blockdefinition dafür öffnen, diese durchsuchen nach BlockReferenzen (dieser Vorgang muss dann rekursiv sein, könnte ja wiederum aus Subblöcken bestehen).

Hat die Blockdefinition ihrerseits Subblöcke, dann musst Du den Einfügepunkt des Subblocks in der Blockdefinition ermitteln, dieser Einfügepunkt muss dann über Verschiebung/Skalierung/Rotation des übergeordneten Blocks umgerechnet werden. Geometrische Vektoren und Matrizen rechnen.

Zur Praxis:
Wenn Du einen Block 100x40 in der Zeichnung hast, dann weisst Du doch schon, dass der Subblock1-3 inkludiert!
Die Auswertung, wenn Du schon mit Datenbank hantierst, ist in der Datenbank leichter lösbar (die Datenbank darf ja wissen, dass 'Fachboden 100x40' aus Subblock1-3 besteht).

- alfred -

------------------
www.hollaus.at

gerhard123
Mitglied
techn.Angestellter


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

Beiträge: 151
Registriert: 29.11.2007

erstellt am: 04. Mrz. 2009 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

Hallo Alfred,

du hast schon recht mit der Blockdefinition in der DB. Auber ich möchte so vorgehen, dass wenn der Block "Fach 100x40" in der DB noch nicht existiert, ich mir zu diesem Block einen Datensatz erstelle mit den Informationen aus dem Block (Artikelnummern, Mengen und Positioniertung, und den Datensatz mit Informationen aus den ERP-System vervollstäntige). Damit habe ich keine Probleme, habe schon einige Programme mit VB.net gemacht.

Probleme machen mir eher die Infos auf dem Autocad.
Hast du zum Thema " Blockdefinition öffnen und diese durchsuchen nach BlockReferenzen" auch ein kleines Codebeispiel für mich?
Das würde mir sehr weiterhelfen.

Danke nochmals für deine Hilfe
Gerhard

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


Ex-Mitglied

erstellt am: 04. Mrz. 2009 08:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

ergänzend zu obigem Code:
Code:
dim tBlock as AcadBlock
dim tSubEnt as AcadEntity
set tBlock = ThisDrawing.Blocks(tEnt.Name)
for each tSubEnt in tBlock
   if TypeOf tSubEnt is AcadBlockReference then
      'hier hast du einen Subblock
   end if
next

- alfred -

------------------
www.hollaus.at

[Diese Nachricht wurde von a.n. am 04. Mrz. 2009 editiert.]

gerhard123
Mitglied
techn.Angestellter


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

Beiträge: 151
Registriert: 29.11.2007

erstellt am: 04. Mrz. 2009 08:24    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 Alfrad,

danke für deine Mühe.

Gerhard

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

gerhard123
Mitglied
techn.Angestellter


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

Beiträge: 151
Registriert: 29.11.2007

erstellt am: 04. Mrz. 2009 14:25    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 Alfred,

ich komme da nicht so richtig zusammen. Kannst du mir zu der rekursiven Schleife noch ein paar Tips geben.

Mit deinem Code bekomme ich alle Blöcke in der obsersten Ebenen aber ich schaffe es nicht auf die Blöcke aus der Zeiten oder Dritten Ebene zuzugreifen. Steh da voll auf der Leitung

Lg.
Gerhard

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


Ex-Mitglied

erstellt am: 04. Mrz. 2009 14:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Gerhard,

alternativer Vorschlag (für rekursive Geschichte hab ich jetzt nicht die Zeit  ):

Wenn Du die Bestandteile einer Blockzusammenstellung sowieso in die Datenbank schreibst, dann mach zuerst mal eine temporäre Tabelle, in der Du die Blockdefinitionen (samt Blockreferenzen der ersten Hierarchie) anlegst, Tabelle sieht dann z.B. so aus:

Code:
BLNAME                          |  SUBBLNAME                        |  PNT_X  |  PNT_Y
FACHBODEN_100x40                |  SubBlock1 123456 Konsole links  |  9.99  |  9.99
FACHBODEN_100x40                |  Subblock2 123457 Konsole rechts  |  9.99  |  9.99
FACHBODEN_100x40                |  SubBlock3 123458 Blechboden      |  9.99  |  9.99

und sollten diese SubBlockXXX weiter SubBlöcke inkludieren, dann halt auch für diesen die Zeilen dazu

Subblock2 123457 Konsole rechts |  Schraube M10x36                  |  0.00  |  0.00



Damit brauchst Du dann nurmehr die obersten Blockreferenzen aus der Zeichnung rausspielen, da Du in der Datenbank schon die Bestandteile dazu hast.

Die Blockdefinitionen gehst Du so durch:

Code:
dim tBlDef as AcadBlock
for each tBlDef in ThisDrawing.Blocks
  if left(tBlDef.Name) <> "*" then  'ModelSpace und anonyme nicht berücksichtigen
      'eventuell hier noch prüfen, ob es sich um ein XRef handelt
      dim tSubEnt as AcadEntity
      for each tSubEnt in tBlDef
        if typeof tSubEnt is AcadBlockReference then
            'das ist ein in der Blockdefinition vorhandene Blockreferenz
        endif
      next
  end if
next

BTW hast Du schon mal den Befehl 'EATTEXT' probiert?

- alfred -

------------------
www.hollaus.at

[Diese Nachricht wurde von a.n. am 04. Mrz. 2009 editiert.]

gerhard123
Mitglied
techn.Angestellter


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

Beiträge: 151
Registriert: 29.11.2007

erstellt am: 05. Mrz. 2009 12:28    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 Alfred,

danke für deine Hilfe

Gerhard

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