Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Blocks von xrefs identifizieren

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:  Blocks von xrefs identifizieren (775 mal gelesen)
Enza
Mitglied



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

Beiträge: 27
Registriert: 04.06.2007

AutoCAD 2012

erstellt am: 06. Jun. 2014 09:44    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,

ich suche eine Möglichkeit zu bestimmen, ob eine Blockreferenz in einem xref enthalten ist, oder direkt in die Zeichnung eingefügt wurde.

Hintergrund: Ich möchte alle Blöcke und Xrefs in einer Zeichnung mit einer transienten Grafik markieren. Beim Iterieren durch die BlockTable werden dann aber auch nested blocks und blocks in xrefs gefunden und markiert. Nested blocks konnte ich schon herausfiltern, aber bei xrefs wird immer noch jedes xref insgesamt markiert und dann noch einmal jeder Block einzeln (und das auch noch bezüglich des Nullpunkts im xref...).

Mein Code sieht bisher so aus:

Code:

Document activeDocument = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database database = activeDocument.Database;
Autodesk.AutoCAD.DatabaseServices.TransactionManager transactionManager = database.TransactionManager;

using (Transaction transaction = transactionManager.StartTransaction())
{
      BlockTable blockTable = (BlockTable)transaction.GetObject(database.BlockTableId, OpenMode.ForRead);

      foreach (ObjectId objectId in blockTable)
      {
          BlockTableRecord blockTableRecord = (BlockTableRecord)transaction.GetObject(objectId, OpenMode.ForRead);

          if (!blockTableRecord.IsLayout)
          {
                ObjectIdCollection objectIdCollection = blockTableRecord.GetBlockReferenceIds(false, false);
                foreach (ObjectId blockReferenceId in objectIdCollection)
                {
                      BlockReference blockReference = (BlockReference)transaction.GetObject(blockReferenceId, OpenMode.ForRead);

                      if (IsPrimary(blockReference)) //&& filter blocks from xrefs
                      {
                            //draw transient bounding box
                            //...
                      }
                }
          }
      }
}

private bool IsPrimary(BlockReference blockReference)
{
      BlockTableRecord owner = (BlockTableRecord)blockReference.OwnerId.GetObject(OpenMode.ForRead);

      return owner.IsLayout;    //false for nested blocks
}


Wie kann ich die Blöcke, die in einem Xref enthalten sind, herausfiltern?

Vielen Dank für eure Antworten!

Viel Grüsse

Enza

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 06. Jun. 2014 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 Enza 10 Unities + Antwort hilfreich

Kenne mich ja nicht mit .Net aus, ABER

1. Sollte der Name eindeutig sein "*|*" und
2. sollte der Block die Eigenschaft "extern abhängig" haben.

Ein Block welcher in einer externen Datei definiert ist kann NICHT in der Masterdateieingefügt werden,
das ganze stimmt auch anders herum: In der Masterdatei definierte Blöcke können nicht vom XRef genutzt
werden.

Es sei denn du meinst "Namensgleich", das wäre wieder etwas anderes, aber ich denke darum geht es dir nicht.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

Enza
Mitglied



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

Beiträge: 27
Registriert: 04.06.2007

AutoCAD 2012

erstellt am: 06. Jun. 2014 10: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

blockTableRecord.IsDependent, das war's!

Vielen Dank!

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