Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Auswahl auf 0,0 verschieben

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
  
NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
Autor Thema:  Auswahl auf 0,0 verschieben (1936 mal gelesen)
Bernhard F.
Mitglied



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

Beiträge: 24
Registriert: 17.03.2008

WIN 10
BricsCAD 20
Autocad 2019

erstellt am: 10. Jun. 2009 13:59    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

Kann mir jemand sagen, wie ich eine auswahl auf 0,0 verschieben kann?

folgenden Code habe ich:

Code:

Public Sub test_2()
    Dim sset As AcadSelectionSet
    Dim Entity As AcadEntity
    Dim fType%(1), fData(1)

    Dim minExt As Variant
    Dim maxExt As Variant
    Dim test As Variant
    Dim FromPoint  ', ToPoint
    Dim ToPoint(0 To 2) As Double

    On Error Resume Next
 
    Set sset = ThisDrawing.SelectionSets("Rahmen")
    If Err.Number Then
      Set sset = ThisDrawing.SelectionSets.Add("Rahmen")
    End If
    On Error GoTo 0
   
    fType(0) = 0
    fData(0) = "INSERT"
    fType(1) = 8  ' Layer
    fData(1) = "RAHMEN_EINGEFUEGT"
    fType(1) = 2  ' Blockname
    fData(1) = "NEW_BLOCK"
   
    sset.Select acSelectionSetAll, , , fType, fData
    For Each Entity In sset
        If Entity.ObjectName = "AcDbBlockReference" Then
       
        Entity.GetBoundingBox minExt, maxExt
       
        If minExt(0) <> "0" Then
       
          MsgBox " Nicht 0,0"
         
          On Error Resume Next
         
          Set sset = ThisDrawing.SelectionSets("ALLES")
         
          sset.Select acSelectionSetAll
         
          FromPoint = minExt
         
          ToPoint(0) = 0#
          ToPoint(1) = 0#
          ToPoint(2) = 0#
         
        For Each nItem In acSSet
          Entity.Move FromPoint, ToPoint
        Next
         
        End If
             
        End If
    Next
    sset.Delete
End Sub



Danke im voraus.

------------------
Gruß, Bernhard F.

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


Ex-Mitglied

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

Hi Bernhard,

bitte nochmals um Beschreibung, denn Dein Code schiebt alles mögliche (wobei mir auch nicht klar ist, woher 'acSSet' kommt (in Deiner inneren Schleife)).

Möchtest Du jedes einzelne Element Deines SelectionSets nach 0,0 (der Extents) verschieben?
Oder soll zuerst Extents des gesamten SelectionSets gebildet werden und dann der linke untere Punkt zu 0,0 werden?

Und ist die Ermittlung über Extents überhaupt richtig? Denn z.B. ein Text, der Mitte-Zentriert eingesetzt ist, wird dann so geschoben dass der 'markante Punkt' des Textes eben nicht auf 0,0 gelegt wird.

Und welchen Zweck hat die Prüfung  'If Entity.ObjectName = "AcDbBlockReference" Then',  denn das SelectionSet is ha schon mit Filter (Selektier nur BlockReferenzen) gebaut?

- alfred -

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

Bernhard F.
Mitglied



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

Beiträge: 24
Registriert: 17.03.2008

WIN 10
BricsCAD 20
Autocad 2019

erstellt am: 10. Jun. 2009 14:33    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

Es soll ein gesamtes SelectionSets gebildet werden und der linke unter Punkt zu 0,0 werden.

------------------
Gruß, Bernhard F.

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


Ex-Mitglied

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

Hi,

blind geschrieben, also Tipfehler möglich (und kostenlos mitgeliefert )

Code:
Dim tEnt as AcadEntity
dim tAllMin(2) as Double:tAllMin(0) = 99999999.9:tAllMin(1) = 99999999.9:tAllMin(2) = 99999999.9

'zuerst sammeln wir die Min-Extents aller Elemente im SelectionSet
for each tEnt in sset
  Dim tEntMin as Variant
  Dim tEntMax as Variant
  Call tEnt.GetBoundingBox(tEntMin,tEntMax)
  if tEntMin(0) < tAllMin(0) then tAllMin(0) = tEntMin(0)
  if tEntMin(1) < tAllMin(1) then tAllMin(1) = tEntMin(1)
  if tEntMin(2) < tAllMin(2) then tAllMin(2) = tEntMin(2)
Next

'und jetzt verschieben wir alle Element um den MinPoint
dim tDestPnt(2) as double
For each tEnt in sset
  call tEnt.Move(tAllMin,tDestPnt)
Next


HTH, - alfred -

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

Bernhard F.
Mitglied



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

Beiträge: 24
Registriert: 17.03.2008

WIN 10
BricsCAD 20
Autocad 2019

erstellt am: 10. Jun. 2009 15:35    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

Vielleicht etwas umständlich aber es funktioniert.
Code:

Public Sub Alles_Verschieben()
    Dim sset As AcadSelectionSet
    Dim Entity As AcadEntity
    Dim fType%(1), fData(1)

    Dim minExt As Variant
    Dim maxExt As Variant
    Dim Test As Variant
    Dim FromPoint  ', ToPoint
    Dim ToPoint(0 To 2) As Double

    On Error Resume Next
 
    Set sset = ThisDrawing.SelectionSets("Rahmen")
    If Err.Number Then
      Set sset = ThisDrawing.SelectionSets.Add("Rahmen")
    End If
    On Error GoTo 0
   
    fType(0) = 0
    fData(0) = "INSERT"
    fType(1) = 8  ' Layer
    fData(1) = "0"
    fType(1) = 2  ' Blockname
    fData(1) = "Ra1"
   
    sset.Select acSelectionSetAll, , , fType, fData
    For Each Entity In sset
   
    Call Entity.GetBoundingBox(minExt, maxExt)
       
        If minExt(0) <> "0" Then
       
          MsgBox " Nicht 0,0"
        Else
          Exit Sub
        End If
    Next
   
          On Error Resume Next
          Set sset = ThisDrawing.SelectionSets("ALLES")
         
          sset.Select acSelectionSetAll
         
          FromPoint = minExt
         
          ToPoint(0) = 0#
          ToPoint(1) = 0#
          ToPoint(2) = 0#
         
      For Each Entity In sset
          Entity.Move FromPoint, ToPoint
      Next
    sset.Delete
End Sub


------------------
Gruß, Bernhard F.

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



Anzeige:Infos zum Werbeplatz >>

JTB SSMPropEditor CAD APP für Allgemeine Werkzeuge, AEC - Architektur-, Ingenieur- und Bauwesen

Batch edit sheet properties and sheet set properties in a way that can't be done in the Sheet Set Manager.


Ex-Mitglied

erstellt am: 10. Jun. 2009 15:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

kleine Bemerkung sei mir erlaubt:

Wenn mehrere BlockReferenzen mit dem Namen 'RA1' existieren, dann geht Dein Makro aber nur wenn der erste gefundene Block den X-Wert der Extents-Min <> 0.0 hat. Ist der vom ersten gefundenen Block der Extents-Min-X-Wert = 0, fliegt er aus der Sub raus.

Und das zweite ist auch schon mitgesagt, es wird nur der X-Wert überprüft, nicht Y und nicht Z.

- alfred -

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

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)2025 CAD.de | Impressum | Datenschutz