Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  For each-Schleife

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:  For each-Schleife (429 mal gelesen)
Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 13. Jan. 2011 08:07    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 an Alle,
ich verwende den Code unten um alle meine Blockreferenzen in einem bestimmten Layout aus zufiltern. Das klappt gut, ist aber sehr langsam. Hat jemand eine Idee wie es schneller ginge. Auch kleine Verschnellerungen wären schon von Vorteil weil der Code oft abläuft. 

Public Sub Aktuell()
        Dim xtypeOut As Object
        Dim xdataOut As Object
        Dim Bezeichnung As AcadBlockReference
        Dim Attrib As Object
        Dim i As Integer
        Dim A As Integer
        Dim B As Integer
        Dim Entity As AcadEntity
        Dim Thing(0) As AcadEntity
        sstext = ThisDrawing.SelectionSets.Add("111")
        For Each Entity In ThisDrawing.ActiveLayout.Block
            If Entity.ObjectName = "AcDbBlockReference" Then
                Try
                    Entity.GetXData("", xtypeOut, xdataOut)
                    If Strings.UCase(xdataOut(0)) = "HERMANNSBEZEICHNUNG" Then
                        Thing(0) = Entity
                        sstext.AddItems(Thing)
                    End If
                Catch ex As Exception
                End Try
            End If
        Next Entity

Ich habe auch schon folgendes verwendet:

        FilterType(0) = 0
        FilterData(0) = "INSERT"
        FilterType(1) = 1001
        FilterData(1) = "HermannsBezeichnung"
        sstext.Delete()
        sstext = ThisDrawing.SelectionSets.Add("111")
        sstext.Select(Common.AcSelect.acSelectionSetAll, , , FilterType, FilterData)

Das ist viel schneller, dursucht aber die ganze Zeichnung.
kann ich im nachhinein irgendwie herausfinden in welchem Layout sich die Blockref befindet? Dann könnte ich in einer weiteren Schleife die aus dem aktuellem Layout finden.

Danke im Vorraus.

Gruß, Theo

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


Ex-Mitglied

erstellt am: 13. Jan. 2011 08:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Das ist viel schneller, dursucht aber die ganze Zeichnung.

Um nicht die ganze Zeichnung zu durchsuchen, kannst Du auch bestimmen/filtern, in welchem Bereich ein Element liegt, das ganze mit dem DXF-Code 410 (z.B. (410 . "Layout1") ).

Ergänze also Deinen Filter:

Code:
FilterType(1) = 410
FilterData(1) = "Layout1"    'hier natürlich Deinen Layoutnamen

HTH, - alfred -

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

Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 13. Jan. 2011 12:01    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,

das habe ich probiert. Funktioniert, solange es sich um Layouts handelt.
Der Modellbereich ist eine Ausnahme.

FilterType(1) = 410
FilterData(1) = "Modell"

Das geht bei mir nicht

Lieber wäre es mir ich könnte das Layout im nachhinein herausfinden.
Das Blockref-Objekt muß doch irgendwo das Layout enthalten. Oder nicht? Die Datei bekomm ich z. B. mit

BEZ(i).Datei = Bezeichnung.document.name

Gibt es da nicht auch das Layout?

Danke Hermann

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


Ex-Mitglied

erstellt am: 13. Jan. 2011 12:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Der Modellbereich ist eine Ausnahme. [...] Das geht bei mir nicht

Zeichne mal eine Linie im Modellbereich, dann starte folgendes LISP-Statement:
(entget (car (entsel)))
...und Du wirst erkennen, dass sich hinter DXF-Code 410 "Model" verbirgt, mit einem 'l'. 


>> Lieber wäre es mir ich könnte das Layout im nachhinein herausfinden

Mit Entity.OwnerID (bzw. in 64bit Systemen) mit Entity.OwnerID32 kannst Du die ID des übergeordneten Objekts erkennen, das lässt dann den Rückschluss auf Modellbereich-ID oder Layout-Block-ID zu.

HTH, - alfred -

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

Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 13. Jan. 2011 14:45    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,

"mit einem l", das ist die Lösung. Da hatte ich nicht richtig hin geschaut.
Das Layout kriege ich im nachhinein mit folgender kleinen Schleife heraus:

For Each register In ThisDrawing.Layouts
                If Register.Block.ObjectID = Bezeichnung.Ownerid Then BEZ(i).Layout = Register.Name
            Next

Danke, Theo

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