| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: dwg als Block einfügen (1619 / mal gelesen)
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 07. Okt. 2020 07:46 <-- editieren / zitieren --> Unities abgeben:
Hallo miteinander, ich habe jetzt schon eine Weile probiert und ich bekomm es einfach nicht hin eine .dwg als Block an eine bestimmten Punkt einzufügen. Ich steh da an irgendeinem Punkt auf dem Schlauch. Könnte hier bitte jemand einen Beispielcode einstellen der funkioiniert? ------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 07. Okt. 2020 09:42 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 07. Okt. 2020 11:00 <-- editieren / zitieren --> Unities abgeben:
Also mein Plan ist eigentlich ganz einfach. Ich will 2 Blöcke einfügen die einen bestimmten namen haben ("Anschluss1" und "Anschluss2") Dazu wollte ich einfach erstmal einen Block einfügen und habe es schon mit verschiedenen Codes Probiert. Zuletzt hatte ich folgenden Code: Code:
Dim acCurDb As Autodesk.AutoCAD.DatabaseServices.Database acCurDb = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database Using acTrans As Autodesk.AutoCAD.DatabaseServices.Transaction = acCurDb.TransactionManager.StartTransaction() Dim acBlkTbl As Autodesk.AutoCAD.DatabaseServices.BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead) Dim blkRecId As Autodesk.AutoCAD.DatabaseServices.ObjectId = Autodesk.AutoCAD.DatabaseServices.ObjectId.Null If Not acBlkTbl.Has("Baumkrone") Then Using acBlkTblRec As New Autodesk.AutoCAD.DatabaseServices.BlockTableRecord acBlkTblRec.Name = "Baumkrone" acBlkTblRec.Origin = New Autodesk.AutoCAD.Geometry.Point3d(0, 0, 0) Using newdb As New Autodesk.AutoCAD.DatabaseServices.Database(True, False) newdb.ReadDwgFile("O:\test.dwg", Autodesk.AutoCAD.DatabaseServices.FileOpenMode.OpenForReadAndAllShare, False, "") acCurDb.Insert(Autodesk.AutoCAD.Geometry.Matrix3d.Displacement(New Autodesk.AutoCAD.Geometry.Vector3d(0, 0, 0)), newdb, True) End Using blkRecId = acBlkTblRec.Id End Using Else blkRecId = acBlkTbl("Baumkrone") End If If blkRecId <> Autodesk.AutoCAD.DatabaseServices.ObjectId.Null Then Using acBlkRef As New Autodesk.AutoCAD.DatabaseServices.BlockReference(New Autodesk.AutoCAD.Geometry.Point3d(10, 10, 10), blkRecId)
Dim acCurSpaceBlkTblRec As Autodesk.AutoCAD.DatabaseServices.BlockTableRecord acCurSpaceBlkTblRec = acTrans.GetObject(acCurDb.CurrentSpaceId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite) acCurSpaceBlkTblRec.AppendEntity(acBlkRef) acTrans.AddNewlyCreatedDBObject(acBlkRef, True) End Using End If acTrans.Commit() End Using
und bei der Zeile kommt ein Fehler:
Code:
newdb.ReadDwgFile("O:\test.dwg", Autodesk.AutoCAD.DatabaseServices.FileOpenMode.OpenForReadAndAllShare, False, "")
Fehler: eFilerError
------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 07. Okt. 2020 12:00 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 07. Okt. 2020 13:30 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 07. Okt. 2020 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 07. Okt. 2020 13:51 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 07. Okt. 2020 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
ich nutze immer -> System.IO.FileShare.Read Ich kenne das so von c# das ein Backslash als Doppelbackslash geschrieben werden muss oder vor die Zeichenkette ein @ gesetzt wird.
Code:
string _pfad = @"c:\Temp\"; // oder string _pfad = "c:\\Temp\\";
Findet das Tool die Datei?
Code:
if(System.IO.File.Exists(@"c:\Temp\Test.dwg")) { ... } else { ... }
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 |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 07. Okt. 2020 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Meine Standard-Funktion (c#) dafür sieht wie folgt aus: Code:
/// <summary> /// Importiert eine Zeichnungsdatei als Blockdefinition /// </summary> /// <param name="Blockdatei">vollständiger DateiPfad</param> /// <returns></returns> internal static Boolean dtImportBlockDWG(this Database _db, Transaction _tr, String _Blockdatei, out ObjectId _BtrId, string _BlockName) { _BtrId = ObjectId.Null; Boolean _erg = false; bool _blockDefIsAnnotative = false; UnitsValue _insunits = 0; if (System.IO.File.Exists(_Blockdatei)) { using (Database tempDb = new Database(false, false)) { try { tempDb.ReadDwgFile(_Blockdatei, System.IO.FileShare.Read, true, null); _db.Insert(_BlockName, tempDb, true); _blockDefIsAnnotative = tempDb.AnnotativeDwg; _insunits = tempDb.Insunits; _erg = true; } catch (AcRuntime.Exception _e) { AcApp.Application.ShowAlertDialog("006 - " + _e.Message); } } } if (_erg) { _BtrId = _db.dtGetBlockTableRecordId(_tr, _BlockName); using (BlockTableRecord _btr = (BlockTableRecord)_tr.GetObject(_BtrId, OpenMode.ForWrite)) { if (_blockDefIsAnnotative) { _btr.Annotative = AnnotativeStates.True; } _btr.Units = _insunits; } } return _erg; }
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 |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 07. Okt. 2020 14:53 <-- editieren / zitieren --> Unities abgeben:
Ich habe jetzt mal versucht die Datei zu finden If System.IO.File.Exists("O:\test.dwg") Then MsgBox("gefunden") Else MsgBox(" nicht gefunden") End If Exit Sub Egal was ich mache es kommt immer "nicht gefunden". Jemand eine Idee was ich noch ändern kann? Ich habe auch versucht die Datei mal auf C: zu kopieren aber auch das bringt nichts. ------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 07. Okt. 2020 15:02 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
... dann versuche doch einmal herauszufinden, wie man einen Backslash eines Dateipfades in vb.net angibt. Zu den obigen Beispielen gäbe es auch noch die Variante den Backslash als einfachen Slash zu schreiben:
Code:
"c:/test.dwg"
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 |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 07. Okt. 2020 15:10 <-- editieren / zitieren --> Unities abgeben:
hab ich schon alles versucht. Das komisch dabei, ich habe bereits andere Funktionen wo ich auf Excel-Tabellen zugreife und hier musste ich nichts ändern im Pfad. Bsp.: TabMatDatenbank = "W:\X-Materialübersichten\Materialübersicht.xls" If System.IO.File.Exists("O:\test.dwg") Then MsgBox("test gefunden") Else MsgBox("test nicht gefunden") End If If System.IO.File.Exists(TabMatDatenbank) Then MsgBox("Matb gefunden") Else MsgBox("Mat nicht gefunden") End If Das erste findet er nicht, das 2. findet er.
------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 07. Okt. 2020 15:36 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
... dann bin ich raus. Dann muss es in vb.net andere Konventionen geben, wie man die Sonderzeichen Zeichen übergibt. Hast du wirklich mit den von mir genannten Schreibweisen getestet? Wenn ja -> dann ist dein Fehler irgendwo anders. 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 |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 07. Okt. 2020 15:39 <-- editieren / zitieren --> Unities abgeben:
Ich habe es jetzt mit einer anderen DWG versucht welche er über File.exists findet aber auch hier steigt der Code dann bei der gleichen Zeile aus. ------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 07. Okt. 2020 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 13. Jan. 2021 16:21 <-- editieren / zitieren --> Unities abgeben:
Hallo miteinander, ich habe jetzt nochmal etwas getestet und versuch Holgers Code in vb zu Übernehmen, was aktuell wie folgt aussieht: Code:
Dim _db As Database = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database Dim _tr As Transaction Dim _Blockdatei As String Dim _BtrId As ObjectId Dim _BlockName As String _BtrId = ObjectId.Null _Blockdatei = "S:\Austausch\Fiedler\Zeichnung1.dwg" If System.IO.File.Exists(_Blockdatei) Then MsgBox("gefunden") Else MsgBox("nicht gefunden") End If _BlockName = "TestEinf"
Dim _erg As Boolean = False Dim _blockDefIsAnnotative As Boolean = False Dim _insunits As UnitsValue = 0
If System.IO.File.Exists(_Blockdatei) Then
Using tempDb As Database = New Database(False, False) Try tempDb.ReadDwgFile(_Blockdatei, System.IO.FileShare.Read, True, "") _db.Insert(_BlockName, tempDb, True)
_blockDefIsAnnotative = tempDb.AnnotativeDwg
_insunits = tempDb.Insunits
_erg = True
Catch ex As Exception MsgBox("006 - " & vbCrLf & ex.Message) End Try End Using End If
Fehlerzeile = 11 Exit Sub If _erg = True Then _BtrId = _db.dtGetBlockTableRecordId(_tr, _BlockName) Using _btr As BlockTableRecord = _tr.GetObject(_BtrId, OpenMode.ForWrite) If _blockDefIsAnnotative = True Then _btr.Annotative = AnnotativeStates.True End If _btr.Units = _insunits End Using End If Return _erg
Allerdings weis ich nicht wie ich die beiden Zeilen ändern muss: Code: _BtrId = _db.dtGetBlockTableRecordId(_tr, _BlockName)
(Fehler: _db.dtGetBlockTableRecordId ist kein Member von Database) Code: Return _erg
(Fehler:'Eine Return-Anweisung in "Sub" oder "Set" kann keinen Wert zurückgeben.) Kann mir hier jemad weiterhelfen? Was ich an dem Code auch nicht verstehe, Es findet sich nicht einmal InsertBlock oder ähnliches im Code. Wie wird der Block dann an welchem Punkt auf der Zeichnung eingefügt???
------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 13. Jan. 2021 16:37 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
dir fehlt die Funktion dtGetBlockTableRecordId Der Name sagt, das die ObjectId der Blockdefinition ermittelt wird. Ich denke, soetwas ist auch schnell selbst programmiert. Du finbest im geposteten Code kein Einfügen, weil die Routine lediglich den Import als Blockdefinition erledigt. Das Einfügen ist dann wieder in anderen Bibliotheks-Funktionen enthalten, da dies ja ganz verschieden passieren könnte. 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 |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 14. Jan. 2021 07:16 <-- editieren / zitieren --> Unities abgeben:
Ja aber genau das einfügen war ja das was ich von anfang an gesucht habe, da ist mir auch egal ob der Block dann in den Blockdefinitionen hinterlegt ist oder nicht. ------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 14. Jan. 2021 08:36 <-- editieren / zitieren --> Unities abgeben:
Ich habe wollte es jetzt mit folgendem Code probieren Code:
Imports Microsoft.Office.Interop Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry Imports Autodesk.AutoCAD.ApplicationServices Dim _Blockdatei As String = "S:\Austausch\Fiedler\Zeichnung1.dwg"
Dim tAcadDoc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument Dim tBlRef As BlockReference Dim tBlName As String : tBlName = _Blockdatei Dim tPnt As New Point3d(0, 0, 0) tBlRef = tAcadDoc.ModelSpace.InsertBlock(tPnt, tBlName, 1, 1, 1, 0)
Kann mir jemand sagen wie ich tAcadDoc definieren muss damit der Code funktioniert? Bei tAcadDoc.ModelSpace kommt der Fehler: BC30456 '"ModelSpace" ist kein Member von "Document"
------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 29. Mrz. 2023 12:28 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe mich jetzt wiede mit dem Einfügen beschäftigt und den Code so hinbekommen das er hinbekommt. ich habe jetzt nur noch das Problem, dass die Blöcke alle doppelt drin sind einmal gesprengt und einmal noch als Block (Ich vermute das geschieht beim sprengen der Blöcke) Hier mein Code:
Code:
Try ' /// <summary> '/// Importiert eine Zeichnungsdatei als Blockdefinition '/// </summary> '/// <param name="Blockdatei">vollständiger DateiPfad</param> '/// <returns></returns> Dim _db As Autodesk.AutoCAD.DatabaseServices.Database Dim _Blockdatei As String Dim _BlockName As String Dim _BlockId As ObjectId Dim _blockDefIsAnnotative As Boolean Dim _insunits As UnitsValue Dim acBlkTbl As BlockTable Dim acCurSpaceBlkTblRec As BlockTableRecord Dim Pos_X_0 As Decimal = 86.5 Dim Pos_X As Decimal Dim Pos_Y_0 As Decimal = 180 Dim Pos_Y As Decimal
For i = 1 To 3 If i = 1 Then _Blockdatei = "S:\Zeichnungen\LW D\Skizze\Flexotube_Teile\Schlauch_m_Geflecht.dwg" _BlockName = Replace(Mid(_Blockdatei, InStrRev(_Blockdatei, "\") + 1), ".dwg", "") Pos_X = Pos_X_0 Pos_Y = Pos_Y_0 End If If i = 2 Then _Blockdatei = "S:\Zeichnungen\LW D\Skizze\Flexotube_Teile\Nippel_Links.dwg" _BlockName = Replace(Mid(_Blockdatei, InStrRev(_Blockdatei, "\") + 1), ".dwg", "") Pos_X = Pos_X_0 Pos_Y = Pos_Y_0 End If If i = 3 Then _Blockdatei = "S:\Zeichnungen\LW D\Skizze\Flexotube_Teile\Rohr_Rechts.dwg" _BlockName = Replace(Mid(_Blockdatei, InStrRev(_Blockdatei, "\") + 1), ".dwg", "") Pos_X = Pos_X_0 + 52 Pos_Y = Pos_Y_0 End If _db = oDoc.Database _BlockId = ObjectId.Null _blockDefIsAnnotative = False _insunits = 0
If System.IO.File.Exists(_Blockdatei) Then Using tempDb As Database = New Database(False, False) tempDb.ReadDwgFile(_Blockdatei, System.IO.FileShare.Read, True, Nothing) 'tempDb.ReadDwgFile(_Blockdatei, System.IO.FileShare.Read, True, null) _db.Insert(_BlockName, tempDb, True) _blockDefIsAnnotative = tempDb.AnnotativeDwg _insunits = tempDb.Insunits End Using Using acTrans As Transaction = _db.TransactionManager.StartTransaction() ' Open the Block table for read acBlkTbl = acTrans.GetObject(_db.BlockTableId, OpenMode.ForRead) _BlockId = ObjectId.Null 'If Not acBlkTbl.Has(_BlockName) Then ' MsgBox("Block nicht vorhanden!") ' Exit Sub 'Else ' _BlockId = acBlkTbl(_BlockName) 'End If _BlockId = acBlkTbl(_BlockName) ' Insert the block into the current space If _BlockId <> ObjectId.Null Then Using acBlkRef As New BlockReference(New Point3d(Pos_X, Pos_Y, 0), _BlockId) acCurSpaceBlkTblRec = acTrans.GetObject(_db.CurrentSpaceId, OpenMode.ForWrite) acCurSpaceBlkTblRec.AppendEntity(acBlkRef) acTrans.AddNewlyCreatedDBObject(acBlkRef, True) Using dbObjCol As New DBObjectCollection 'If i = 2 Then acBlkRef.Rotation = 1.5708 'If i = 3 Then acBlkRef.TransformBy(Matrix3d.Scaling(1.5, New Point3d(Pos_X, Pos_Y, 0))) acBlkRef.Explode(dbObjCol) For Each dbObj As DBObject In dbObjCol Dim acEnt As Entity = dbObj acCurSpaceBlkTblRec.AppendEntity(acEnt) acTrans.AddNewlyCreatedDBObject(dbObj, True) acEnt = acTrans.GetObject(dbObj.ObjectId, OpenMode.ForWrite) Next End Using End Using End If
' Save the new object to the database acTrans.Commit() End Using Else MsgBox("Blockpfad nicht gefunden" & vbCrLf & "Pfad:" & _Blockdatei) End If Next
Catch ex As Exception MsgBox("Fehler!") End Try
Me.Close() Exit Sub
------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 29. Mrz. 2023 12:42 <-- editieren / zitieren --> Unities abgeben:
Selbst gelöst: Der Code war doppelt und das ertse mal muss raus:
Code:
acCurSpaceBlkTblRec.AppendEntity(acBlkRef) acTrans.AddNewlyCreatedDBObject(acBlkRef, True)
------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 31. Mrz. 2023 12:22 <-- editieren / zitieren --> Unities abgeben:
Ein Problem gibt es noch, daher muss ich nochmal um Hilfe bitten. Ich füge verschieden Blöcke zusammen die Teils gedreht, vergrößert oder verkleinert werden. Das klappt auch soweit. Ich möchte die Blöcke aber als Ursprung einfügen und Sprenge sie dafür. Dabei gibt es aber ein Problem. In den Blöcken sind Bemaßungen und Texte drin die Verknüfungen zu erstellten Zeichnungseigneschaften haben. Diese Verknüpfungen werden aber durch den folgenden Code gelöscht. Code:
Using dbObjCol As New DBObjectCollection acBlkRef.Explode(dbObjCol) For Each dbObj As DBObject In dbObjCol Dim acEnt As Entity = dbObj acEnt = acTrans.GetObject(dbObj.ObjectId, OpenMode.ForWrite) acCurSpaceBlkTblRec.AppendEntity(acEnt) acTrans.AddNewlyCreatedDBObject(dbObj, True) Next
End Using
Hat jemand eine Hilfe wie ich den Code ändern muss damit die Verknüpfungen bleiben?
------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 31. Mrz. 2023 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
... nur als Idee: wenn du mit .ExplodeToOwnerSpace arbeitest könnte es sein, dass die Verknüpfungen erhalten bleiben. Wenn möglich (nur bei gleichmäßiger Skalierung funktioniert der Explode!) müsstest du also Drehung, Skalierung,... auf die Blockreferenz anwenden und dann erst Exploden. Wenn du die resultierenden Elemente (warum auch immer) benötigst, dann müsstest du mit einem Event, die aus dem Explode resultierenden Entities einsammeln - das funktioniert mit dem Event: Database.ObjectAppended 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 |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 03. Apr. 2023 08:23 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für die Antwort Holger. ExplodeToOwner habe ich versucht aber da kommt die Fehlermeldung aus dem Anhang.
Code:
acBlkRef.Rotation = DrehungBogen acBlkRef.TransformBy(Matrix3d.Scaling(FaktorRed, New Point3d(Pos_X, Pos_Y, 0))) acBlkRef.ExplodeToOwnerSpace() acCurSpaceBlkTblRec.AppendEntity(acBlkRef) acTrans.AddNewlyCreatedDBObject(acBlkRef, True)
Bei dem 2. weiß ich leider nicht wo und wie ich das Event: Database.ObjectAppended einsetzen muss.
------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 03. Apr. 2023 08:33 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
... im Anhang sehe ich keine Fehlermeldung, ich vermute aber, dass das ExplodeToOwnerSpace auch erst dann funktioniert, wenn die Blockreferenz einem Space zugeordnet ist - das passiert bei dir aber erst ein paar Zeilen unter dem ExplodeToOwnerSpace. ObjectAppended-Event: wird, wie geschrieben, vom Database-Object zur Verfügung gestellt. 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 |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 03. Apr. 2023 12:10 <-- editieren / zitieren --> Unities abgeben:
Okay, wenn ich die Reihenfolge anpasse läuft das Programm ohne Fehler durch. Jetzt werden aber wieder 2 Object erstellt, das ungesprengte und oben drüber das gesprengte. Code:
acCurSpaceBlkTblRec.AppendEntity(acBlkRef) acTrans.AddNewlyCreatedDBObject(acBlkRef, True) acBlkRef.ExplodeToOwnerSpace()
------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 03. Apr. 2023 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 03. Apr. 2023 13:49 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 03. Apr. 2023 14:39 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 24. Apr. 2023 09:59 <-- editieren / zitieren --> Unities abgeben:
|