Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Selektieren in Blöcken

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:  Selektieren in Blöcken (1221 mal gelesen)
Martin J.
Mitglied


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

Beiträge: 3
Registriert: 30.10.2006

AutoCAD 2006

erstellt am: 30. Okt. 2006 09: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

Hallo,
ich habe das Problem, per VBA innerhalb eines Blockes die Objekte auf einem vorher festgelegten Layer in eine Auswahl zu übernehmen. Die Ausdehnung der Objekte soll dann mit GETBOUNDINGBOX festgestellt werden.
Hat jemand eine Idee, wie ich die Objekte innerhalb eines Blockes selektieren kann?

Danke schon mal
Martin

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

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1357
Registriert: 24.07.2002

erstellt am: 30. Okt. 2006 13: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 Martin J. 10 Unities + Antwort hilfreich

Hallo Martin,

Erst einmal Herzlich wilkommen im Forum.
Zu deiner Frage: Wo hakt es denn?!

Umd an die einzelnen Elemente in einem Block zu gelangen kannst du folgenden Code nutzten:

Public Sub Testblock()
Dim Block As AcadBlock
Dim Object As AcadObject
Dim Ausgabe As String
Dim Pickedpoint As Variant
On Local Error Resume Next
Ausgabe = "Objekt wählen:"
ThisDrawing.Utility.GetEntity Object, Pickedpoint, Ausgabe
Set Block = ThisDrawing.Blocks(Object.Name)
'Ab hier enthält "Block" die einzelnen Elemente des Blocks
End Sub

Danach kannst du die Elemente, die auf dem passenden Layer liegen ja zusammenfassen und dann die maximale Ausdehnung bestimmen.

Gruß, Carsten

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

Martin J.
Mitglied


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

Beiträge: 3
Registriert: 30.10.2006

AutoCAD 2006

erstellt am: 30. Okt. 2006 14:57    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 Carsten,
erst mal vielen Dank für Deine Antwort.

Den Programmcode habe ich wie folgt erweitert:

Code:

    Dim Min, Max, AllMin, AllMax As Variant
    Dim XMax, YMax As Single
    Dim Durchlauf As Boolean
    Durchlauf = False
    For i = 0 To Block.Count - 1
        If Block.Item(i).Layer = "SCHNIK" Then
            'Hole maximale Ausmaße des Blockobjektes
            Block.Item(i).GetBoundingBox Min, Max
       
            'Beim ersten Durchlauf der Schleife
            If Durchlauf = False Then
                AllMin = Min
                AllMax = Max
                Durchlauf = True
            End If
           
            'Abfrage ob Maximalgrenzen überschritten werden
            If Min(0) < AllMin(0) Then AllMin(0) = Min(0)
            If Min(1) < AllMin(1) Then AllMin(1) = Min(1)
            If Max(0) > AllMax(0) Then AllMax(0) = Max(0)
            If Max(1) > AllMax(1) Then AllMax(1) = Max(1)
        End If
    Next i

XMax = AllMax(0) - AllMin(0)
YMax = AllMax(1) - AllMin(1)
MsgBox XMax & " / " & YMax


XMax und Ymax enthalten nun die Absoluten Ausmaße der Elemente auf dem Layer "SCHNIK".

Leider funktioniert das Ganze nicht mit Blöcken deren Einfügefaktor geändert wurde.

Bin für weitere Tipp's offen.


Grüße
Martin

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

Martin J.
Mitglied


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

Beiträge: 3
Registriert: 30.10.2006

AutoCAD 2006

erstellt am: 30. Okt. 2006 15:43    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 Carsten,

habe das Programm hinsichtlich der X/Y-Scalierung nochmal überarbeitet. Hier nun die aktuelle Fassung:

Code:
    Dim Block As AcadBlock
    Dim BlockRef As AcadBlockReference
    Dim Object As AcadObject
    Dim Ausgabe As String
    Dim Pickedpoint As Variant
    On Local Error Resume Next
    Ausgabe = "Objekt wählen:"
    ThisDrawing.Utility.GetEntity Object, Pickedpoint, Ausgabe
    Set BlockRef = Object
    Set Block = ThisDrawing.Blocks(Object.Name)
    'Ab hier enthält "Block" die einzelnen Elemente des Blocks
   
    Dim Min, Max, AllMin, AllMax As Variant
    Dim XMax, YMax As Single
    Dim Durchlauf As Boolean
    Durchlauf = False
    For i = 0 To Block.Count - 1
        If Block.Item(i).Layer = "SCHNIK" Then
            'Hole maximale Ausmaße des Blockobjektes
            Block.Item(i).GetBoundingBox Min, Max
       
            'Beim ersten Durchlauf der Schleife
            If Durchlauf = False Then
                AllMin = Min
                AllMax = Max
            End If
           
            'Abfrage ob Maximalgrenzen überschritten werden
            If Min(0) < AllMin(0) Then AllMin(0) = Min(0)
            If Min(1) < AllMin(1) Then AllMin(1) = Min(1)
            If Max(0) > AllMax(0) Then AllMax(0) = Max(0)
            If Max(1) > AllMax(1) Then AllMax(1) = Max(1)
            Durchlauf = True
        End If
    Next i

XMax = (AllMax(0) - AllMin(0)) * BlockRef.XScaleFactor
YMax = (AllMax(1) - AllMin(1)) * BlockRef.YScaleFactor
MsgBox XMax & " / " & YMax


Damit ist meine Frage beantwortet und ich darf mich für Deine Hilfe bedanken! 10 Unities sind unterwegs.

Gruß
Martin

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