Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Rechteck um Objekte

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:  Rechteck um Objekte (798 mal gelesen)
Jürgen333
Mitglied


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

Beiträge: 4
Registriert: 18.06.2008

erstellt am: 04. Mrz. 2010 18:42    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


RechteckumObjekte.jpg

 
Hallo,

ich möchte ein Rechteck automatisch um beliebige Objekte zeichnen. Siehe Anhang

Gibt es hier für eine Befehl, oder hat jemand eine Idee?

Gruß Jürgen

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

CADmium
Ehrenmitglied V.I.P. h.c.
Maschinenbaukonstrukteur



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

Beiträge: 13508
Registriert: 30.11.2003

ACAD 2004DX Mechanical PP

erstellt am: 04. Mrz. 2010 18:50    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 Jürgen333 10 Unities + Antwort hilfreich


Ex-Mitglied

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

Hi,

ja, von den Objekten die GeometricExtents auslesen (ist eine Eigenschaft, die Du von jedem DatabaseServices.Entity auslesen kannst), die MinWerte und MaxWerte vergleichen und das ergibt die gesamte BoundingBox-Koordinaten, mit denen Du dann eine Polyline als Rechteck zeichnen kannst.

Aufpassen muss man nur bei Attributen, da liefern diese Extents manchmal falsche Werte (Min-Punkt der Extents wird als 0,0,0 ausgegeben), in diesen Fällen greife ich dann, so das Element schon in der Datenbank eingetragen ist, auf die COM-Funktion getBoundingBox zurück.

HTH, - alfred -

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

Jürgen333
Mitglied


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

Beiträge: 4
Registriert: 18.06.2008

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

Danke für die schnellen Antworten

Ich weder mein Glück mal versuchen.

Jürgen

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

Jonapap
Mitglied



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

Beiträge: 206
Registriert: 18.08.2006

ACAD 13 bis 2012
Accurender4
IMOS 9
Rhinoceros 4&5beta
Mastercam X5

erstellt am: 04. Mrz. 2010 20:37    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 Jürgen333 10 Unities + Antwort hilfreich

Habe mal folgende Funktion geschrieben:

Code:

        Private Function GrenzPunkte(ByRef ObjectIDArray As ObjectId()) As Point3dCollection
            Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database
            Dim tm As Autodesk.AutoCAD.DatabaseServices.TransactionManager = db.TransactionManager
            Dim myT As Transaction = tm.StartTransaction()

            Dim id As ObjectId
            Dim ent As Entity
            Dim MinObjektP, MaxObjektP As Point3d
            Dim MinGrenzP(2), MaxGrenzP(2) As Double
            Dim ObjektNr As Integer
            Try
                For Each id In ObjectIDArray
                    ObjektNr += 1
                    ent = CType(tm.GetObject(id, OpenMode.ForRead, True), Entity)
                    MinObjektP = ent.GeometricExtents.MinPoint
                    MaxObjektP = ent.GeometricExtents.MaxPoint
                    If ObjektNr = 1 Then
                        'Grenzpunkte auf erstes Objekt einstellen
                        MinGrenzP(0) = MinObjektP.X : MinGrenzP(1) = MinObjektP.Y : MinGrenzP(2) = MinObjektP.Z
                        MaxGrenzP(0) = MaxObjektP.X : MaxGrenzP(1) = MaxObjektP.Y : MaxGrenzP(2) = MaxObjektP.Z
                    Else
                        If MinGrenzP(0) > MinObjektP.X Then MinGrenzP(0) = MinObjektP.X
                        If MinGrenzP(1) > MinObjektP.Y Then MinGrenzP(1) = MinObjektP.Y
                        If MinGrenzP(2) > MinObjektP.Z Then MinGrenzP(2) = MinObjektP.Z
                        If MaxGrenzP(0) < MaxObjektP.X Then MaxGrenzP(0) = MaxObjektP.X
                        If MaxGrenzP(1) < MaxObjektP.Y Then MaxGrenzP(1) = MaxObjektP.Y
                        If MaxGrenzP(2) < MaxObjektP.Z Then MaxGrenzP(2) = MaxObjektP.Z
                    End If
                Next id
            Finally
                myT.Dispose()
            End Try
            Dim P3dColl As New Point3dCollection
            P3dColl.Add(New Point3d(MinGrenzP(0), MinGrenzP(1), MinGrenzP(2)))  '>>>Minimaler Grenzpunkt
            P3dColl.Add(New Point3d(MaxGrenzP(0), MaxGrenzP(1), MaxGrenzP(2)))  '>>>Maximaler Grenzpunkt
            Return P3dColl
        End Function


------------------
Gruß
Markus

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


Ex-Mitglied

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

Hi Markus,

hast Du, da Du trennst in einzelne Double-Werte für Vergleich, schon mal die Performance mit diesem hier verglichen?

Code:
Dim tEnt As DatabaseServices.Entity = CType(tm.GetObject(ObjectIDArray(0), OpenMode.ForRead, True), Entity)
'Extents des ersten Elements anlegen
Dim tExtents As DatabaseServices.Extents3d = tEnt.GeometricExtents
For Each id In ObjectIDArray
   tEnt = CType(tm.GetObject(id, OpenMode.ForRead, True), Entity)
   tExtents.AddExtents(tEnt.GeometricExtents)
Next id

  - alfred -

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

Jonapap
Mitglied



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

Beiträge: 206
Registriert: 18.08.2006

erstellt am: 04. Mrz. 2010 21: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 Nur für Jürgen333 10 Unities + Antwort hilfreich

Nein, habe ich noch nicht. Kann man die Grenzpunkte dann aus tExtents abrufen?
Wenn ja, wäre dein Code natürlich deutlich schlanker. Habe mir auch irgendwie schon gedacht, dass du das noch besser hinbekommst, als ich 

Aber aus Geschwindigkeitsgründen muss ich meine Funktion jetzt nicht ändern: Auf einem 2 Jahre alten Laptop schafft meine Funktion 10000 Kreise in unter einer Sekunde.

------------------
Gruß
Markus

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


Ex-Mitglied

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

Hi,

>> Kann man die Grenzpunkte dann aus tExtents abrufen?

Die durch .Add hinzugefügten Extents sind nicht eine Ansammlung wie eine Collection, sondern eine Funktion, die genau Deinen Vergleich intern durchführt und den .MinPoint und .MaxPoint bei bedarf korrigiert.

Wenn Du damit die resultierenden Gesamt-Min/Max-Punkte meinst, dann natürlich ja, so wie auch Du mit .MinPoint und .MaxPoint.


>> dass du das noch besser hinbekommst, als ich

Das war nicht Sinn meines Beitrags, unbedingt darauf hinzuweisen, dass es besseren oder schlechteren Code gibt. Mein Interesse war ernst, ich hab's noch nie gemessen und wollte ernst nachfragen, ob Du es ev. schon verglichen hast.


- alfred -

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

Jonapap
Mitglied



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

Beiträge: 206
Registriert: 18.08.2006

erstellt am: 04. Mrz. 2010 23:18    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 Jürgen333 10 Unities + Antwort hilfreich

Hi Alfred,

hab die Funktionen mal beide mit 100.000 Kreisen getestet:
Dein Code: 2.2499856 Sekunden
Mein Code: 3.3595470 Sekunden

Dein Codebeispiel ist also rund 33% schneller und schafft obendrein noch mehr Übersicht.

Die Anspielung von mir war übrigens nicht böse gemeint. Ich lese jeden Beitrag in dem Object-ARX Forum (kommt ja nicht so oft etwas dazu) und habe dabei von deinen Beiträgen schon viel gelernt.
Jetzt bin ich wieder ein bischen schlauer. Danke für den Tip.

------------------
Gruß
Markus

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



NC-Programmierer Zerspanung/Entgraten (w/m/div.)

Möchten Sie Ihre Ideen in nutzbringende und sinnvolle Technologien verwandeln? Ob im Bereich Mobility Solutions, Consumer Goods, Industrial Technology oder Energy and Building Technology - mit uns verbessern Sie die Lebensqualität der Menschen auf der ganzen Welt. Willkommen bei Bosch.

Die Robert Bosch GmbH freut sich auf Ihre Bewerbung!


Anstellungsart: Unbefristet
Arbeitszeit: ...
Anzeige ansehenAutomatisierungstechnik

Ex-Mitglied

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

Hi Markus,

Oh vielen Dank für's ausprobieren, bin ich auch wieder schlauer, 10Us4You 

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