Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Blockref.explode

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:  Blockref.explode (2193 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

ACAD 2019
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 08. Feb. 2012 13: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,
eine Frage an die Profis. Mit dem Code unten, versuche ich Blöcke auf zu lösen. Leider bekomme ich bei ungleichmäßig skalierten Blöcken eine Fehlermeldung. Gibt es eine Möglichkeit auch ungleichmäßig skalierte Blöcke zu sprengen?

Danke Theo


  <Autodesk.AutoCAD.Runtime.CommandMethod("testex")> _
      Public Sub testex()

        Dim DBDoc As Database
        DBDoc = HostApplicationServices.WorkingDatabase
        Dim Splitter As DatabaseServices.DBObjectCollection
        Dim Myblock As DatabaseServices.BlockReference
        Dim MyID As ObjectId
        Dim myEditor As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
        Dim Editorresult As PromptEntityResult
        Dim myPDO As New PromptEntityOptions("Quellobjekt wählen: ")
        myPDO.AllowObjectOnLockedLayer = True
        Editorresult = myEditor.GetEntity(myPDO)
        If Editorresult.Status = PromptStatus.None Then Exit Sub
        If Editorresult.Status = PromptStatus.Cancel Then Exit Sub
        If Editorresult.Status = PromptStatus.OK Then
            MyID = Editorresult.ObjectId
            Splitter = New DBObjectCollection
            Using TrAct As Transaction = DBDoc.TransactionManager.StartTransaction()
                MyObjekt = CType(TrAct.GetObject(MyID, OpenMode.ForRead, False, True), Entity)
                Myblock = MyObjekt
                Myblock.ExplodeToOwnerSpace()
                TrAct.Commit()
            End Using
           
        End If
        DBDoc.Dispose()
    End Sub

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 08. Feb. 2012 14:02    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 Theo37 10 Unities + Antwort hilfreich

Hallo Theo37,

nein.
Du kanst aber einen Workaround machen, in dem du die Objekte der Blockdefinition hernimmst, und diese auf die Matrix der aufzulösenden Blockreferenz transformierst. Das wird nicht bei allen Objekten funktionieren, weshalb du dies in einer try/catch geschützten Umgebung machen solltest. Im Ergebnis hast du zumindest die Objekte, die ungleich skaliert werden können.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

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

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: 08. Feb. 2012 14: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

Hallo Holger,

meine Gedanken gingen in eine ähnliche Richtung. ich wollte die scalefaktoren des Blocks auf 1 setzen. Dann hätte ich ihn aufgelöst. Und dann wollte ich die Fragmente des Blocks wieder mit den ursprünglichen Scalefaktoren des Blocks skalieren. Und da liegt mein Problem, wie kann ich Objekte ungleichmäßig skalieren? du schreibst....und diese auf die Matrix der aufzulösenden Blockreferenz transformierst....
Dieses Transformieren?, könntest Du mir da ein Beispiel zeigen? Oder Stichpunktartig die Vorgenhensweise zeigen.
Danke Theo

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 08. Feb. 2012 14:21    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 Theo37 10 Unities + Antwort hilfreich

Stichworte:
von der BlockReference: BlockTransform
beim Zielobject: TransformBy

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

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

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: 09. Feb. 2012 14:38    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 Holger,

ich hab jetzt mal ein bischen Quelltext geschrieben. Steht unten.
Leider bekomme ich immer nur eine Fehlermeldung: "eCannotScaleNonUniformly".
Mein englisch ist nicht so gut. Aber das heist wohl, man kann nicht ungleichmässig skalieren. Jetzt meine Frage. Mache ich was falsch, oder geht es schlichtweg nicht? Der Block mit dem ich probiert habe enthielt nur eine einfache Polylinie. Daran lag es wohl nicht.
Bitte schau Dir den Code unten mal an, und schreib mir was du grundsätzlich anders machen würdest.

Danke, Theo

<Autodesk.AutoCAD.Runtime.CommandMethod("textex")> _
    Public Sub textex()

        Dim DBDoc As Database
        Dim Myblock As DatabaseServices.BlockReference
        Dim MyBlockob As DBObjectCollection = New DBObjectCollection
        Dim Mymatrix As Geometry.Matrix3d
        DBDoc = HostApplicationServices.WorkingDatabase
        Dim MyID As ObjectId
        Dim myEditor As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
        Dim Editorresult As PromptEntityResult
        Dim myPDO As New PromptEntityOptions("Quellobjekt wählen: ")
        myPDO.AllowObjectOnLockedLayer = True
        Editorresult = myEditor.GetEntity(myPDO)
        If Editorresult.Status = PromptStatus.None Then Exit Sub
        If Editorresult.Status = PromptStatus.Cancel Then Exit Sub
        If Editorresult.Status = PromptStatus.OK Then
            MyID = Editorresult.ObjectId
            Using TrAct As Transaction = DBDoc.TransactionManager.StartTransaction()
                MyObjekt = CType(TrAct.GetObject(MyID, OpenMode.ForWrite, False, True), Entity)
                Myblock = MyObjekt
                Mymatrix = New Matrix3d(Myblock.BlockTransform.ToArray)
                Myblock.ScaleFactors = New Scale3d(1, 1, 1)
                Myblock.Explode(MyBlockob)
                For Each MyObjekt In MyBlockob
                    MyObjekt.TransformBy(Mymatrix)
                    TrAct.AddNewlyCreatedDBObject(MyObjekt, True)
                Next
                TrAct.Commit()
            End Using
        End If
        DBDoc.Dispose()
    End Sub
End Class

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 09. Feb. 2012 14: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 Nur für Theo37 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Brischke:
... Das wird nicht bei allen Objekten funktionieren, weshalb du dies in einer try/catch geschützten Umgebung machen solltest. Im Ergebnis hast du zumindest die Objekte, die ungleich skaliert werden können. ...

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

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

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: 09. Feb. 2012 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 Holger,

Ich hatte die Hoffnung eine Polylinie würde sich ungleich skalieren lassen.
Welche Objekte denkst Du lassen sich ungleich skalieren? Was ich nicht brauche sind Texte, attribute,Bemaßungen, Schraffuren und solche Sachen. Was ich brauche sind: Polylinien, Linien, Kreise und zB. auch Blöcke. Ich hab jetzt mal nen Block erstellt der nur aus einer Linie besteht. Und auch bei dem flieg ich ab, wenn er ungleichmässig skaliert ist. Was mach ich falsch?

Gruß, Theo

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 09. Feb. 2012 15: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 Nur für Theo37 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Theo37:
... Was mach ich falsch?

Mensch Theo, du liest nicht richtig!

Zitat:
Original erstellt von Brischke:
... Du kanst aber einen Workaround machen, in dem du die Objekte der Blockdefinition hernimmst, und diese auf die Matrix der aufzulösenden Blockreferenz transformierst.

Du nimmst die Blockreferenz und machst damit ein Explode - das funktioniert ja nicht, weil diese ungleichmäßig skaliert ist. Du bist keinen mm weiter mit dem neuen Code, und das, was ich geschrieben habe, ist bei dir nicht im Ansatz zu sehen.

Grüße!
Holger


------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

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

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: 09. Feb. 2012 15:32    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

OK, ich hab ne andere Vorgenhensweise. Wenn ich dich richtig verstehe, würdest Du die Objekte aus der Blockdef. nehmen und diese dann mit TransformBy behandeln. Aber egal woher die Objekte kommen. Die Frage bleibt: Kann ich eine Linie ungleichmässig mit TransformBy skalieren? Ich hab mal folgendes gemacht:
Myline = New Line(New Point3d(0, 0, 0), New Point3d(1, 1, 1))
                Myline.TransformBy(Mymatrix)
Auch das bringt die Fehlermeldung: "eCannotScaleNonUniformly".
Ich habe den Verdacht, daß es nicht geht. Oder ich hab doch noch nen Denkfehler drin.

Vielen Dank.
Gruß, Theo

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 09. Feb. 2012 15:36    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 Theo37 10 Unities + Antwort hilfreich

.. die Fehlermeldung ist eindeutig: Du kannst eine Linie nicht ungleichmäßig skalieren.
Du kannst aber, denke ich mal, den Anfangs und Endpunkt skalieren und mit dem Ergebnis die Liniendaten ändern.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

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