Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Problem mit Block insert

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:  Problem mit Block insert (2119 mal gelesen)
Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2019/2020
CAD+T 2020
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 31. Okt. 2012 12:24    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


Fehlermeldung.jpg

 
Hallo zusammen!

Bin dabei mich in .Net einzuarbeiten und probier gerade einen Block mittels Einfügepunkt einzufügen.
In VB.Net erscheinen keine Fehlermeldungen, .NET Framework 3.5 ist eingestellt.

Ruf ich das Programm in AutoCAD auf, so kann ich noch den Einfügepunkt festlegen und dann bricht das Programm bzw. AutoCAD ab.
(siehe auch Bildchen / Fehlermeldung)


Code:

Imports System

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Windows

Public Class MyCommand

    <CommandMethod("Blockinsert")>
    Public Sub MyCommand()
        Dim BlockFile As String
        BlockFile = "D:\Konstruktion\AutoCAD\Bloecke_Artikel\300\TBHäf-110°-0_D.dwg"

        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database
        Dim ed As Editor = acDoc.Editor

        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
            Try
                Dim acBlkTbl As BlockTable
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)

                Dim acBlkTblRec As BlockTableRecord
                acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)

                Dim PPResu As PromptPointResult
                Dim instPkt(2) As Double
                Dim PPOpt As PromptPointOptions = New PromptPointOptions("")

                PPOpt.Message = vbLf & "Einfügepunkt festlegen: "
                PPResu = ed.GetPoint(PPOpt)
                instPkt(0) = PPResu.Value.X : instPkt(1) = PPResu.Value.Y : instPkt(2) = PPResu.Value.Z

                Dim db As Database = New Database(False, False)
                db.ReadDwgFile(BlockFile, IO.FileShare.Read, True, "")
                Dim ArtikelBlock As ObjectId
                ArtikelBlock = acDoc.Database.Insert(BlockFile, db, False)
                Dim ArtikelBlockRef As BlockReference = New BlockReference(New Autodesk.AutoCAD.Geometry.Point3d(instPkt), ArtikelBlock)


                acBlkTblRec.AppendEntity(ArtikelBlockRef)
                acTrans.AddNewlyCreatedDBObject(ArtikelBlockRef, True)
                acTrans.Commit()


            Catch Ex As Autodesk.AutoCAD.Runtime.Exception
                Application.ShowAlertDialog("The following exception was caught:" & _
                                            vbLf & Ex.Message)
            Finally
                Application.ShowAlertDialog("End of command reached")
            End Try

        End Using
    End Sub
End Class


Kann mir jemand dabei Helfen, woran es liegt?
Wie müßte der Code denn richtig lauten?

Vielen Dank im Voraus.

------------------
Gruß

Dirk

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: 02. Nov. 2012 09:10    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

meine Standard-Routine für diese Aufgabe sieht wie folgt aus. Musst du mal vergleichen.

Code:

// _Blockdatei = kompletter Pfad+Dateiname der einzufügenden Zeichnung
// _BlockFileBaseName = Dateiname ohne Pfad ohne Dateierweiterung
using (Database tempDb = new Database(false, true))
  {
    try
      {
        tempDb.ReadDwgFile(_Blockdatei, System.IO.FileShare.Read, true, null);
        _db.Insert(_BlockFileBaseName, tempDb, false);
        _erg = true;
      }
    catch { }
  }

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2019/2020
CAD+T 2020
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 06. Nov. 2012 13:28    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!

Danke für die Info.

Das Kernproblem waren jedoch einige fehlerhafte Blöcke.
Nach dem ich diese mit "WHERST" geprüft und wieder hergestellt habe
funktioniert es auch mit diesen Blöcken.

Unter VBA habe ich solch ähnliche Fehlermeldungen mit On Error ...
abfangen können, bevor AutoCAD abstürzte.

Wie kann man solche Fehlermeldungen denn unter VB.Net abfangen?
Könntest Du mir dazu einen Tipp geben.

------------------
Gruß

Dirk

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: 06. Nov. 2012 17: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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,
in vb.Net weiß ich's nicht. In c#.Net geht das mit try{} catch{}

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2019/2020
CAD+T 2020
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 06. Nov. 2012 21:00    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 habs schon mal so probiert, jedoch ohne Erfolg:

Code:

'...
'...

weiter:

Catch ex As Autodesk.AutoCAD.Runtime.Exception
    Dim result As DialogResult = MessageBox.Show _
        (ex.Message, "Fehlermeldung", MessageBoxButtons.YesNo, _
        MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2)

    Select Case result
        Case Forms.DialogResult.Yes
            Exit Sub
        Case Forms.DialogResult.No
            GoTo weiter
        End Select
    Finally
    End Try


Könntest Du davon etwas ableiten?

------------------
Gruß

Dirk

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: 06. Nov. 2012 23:31    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 Dirk.B 10 Unities + Antwort hilfreich

... was soll ich davon ableiten?

Versuch es doch einfach mal mit einer Division durch Null. 1/0 wirst du nicht direkt hinschreiben können, weil das der Compiler schon merkt. Du musst das also in Variablen packen, damit der Fehler auch tatsächlich ausgelöst wird und in den catch Bereich springt.

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2019/2020
CAD+T 2020
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 13. Nov. 2012 13:52    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 zusammen!

Ich habe noch so meine Probleme mit dem BlockTable und BlockTableRecord.
Es wäre schön, wenn mir da jemand auf die Sprünge helfen könnte.
Einen Block von extern einzufügen funktioniert.

Wenn ich aber nun einen Block direkt in der aktuellen Zeichnung erstelle und diesen über einen Einfügepunkt am Bildschirm einfügen möchte, funktioniert es nicht.

Daher meine Frage, wo liegt hier der Fehler und was mus ich wie ändern?

Code:

<CommandMethod("bt")>
    Public Sub BlockTest()

        Dim acDoc As Document = DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database
        Dim ed As Editor = acDoc.Editor

        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction
            Dim TBlesen As BlockTable = acCurDb.BlockTableId.GetObject(OpenMode.ForWrite)
            Dim TBschreiben As BlockTableRecord = acCurDb.BlockTableId.GetObject(OpenMode.ForWrite)

            If TBlesen.Has("CircleBlock2") = True Then
                MsgBox("Diesen Block gibt es bereits", MsgBoxStyle.Information)
                Exit Sub
            End If

            Dim myNewBlock As New BlockTableRecord
            myNewBlock.Name = "CircleBlock2"
            Dim myCircle As New Circle(Point3d.Origin, Vector3d.ZAxis, 1.5)
            myCircle.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.None, 10)
            Dim myCircle1 As New Circle(Point3d.Origin, Vector3d.ZAxis, 2.5)
            myCircle1.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.None, 50)
            Dim myCircle2 As New Circle(Point3d.Origin, Vector3d.ZAxis, 3.5)
            myCircle2.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.None, 9)
            Dim myCircle3 As New Circle(Point3d.Origin, Vector3d.ZAxis, 4.5)
            myCircle3.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.None, 140)

            myNewBlock.AppendEntity(myCircle)
            myNewBlock.AppendEntity(myCircle1)
            myNewBlock.AppendEntity(myCircle2)
            myNewBlock.AppendEntity(myCircle3)

            TBlesen.Add(myNewBlock)
            acTrans.AddNewlyCreatedDBObject(myNewBlock, True)

            '--Den Einfügepunkt am Bildschirm bestimmen--!!
            Dim PPResu As PromptPointResult
            Dim instPkt(2) As Double
            Dim PPOpt As PromptPointOptions = New PromptPointOptions("")

            PPOpt.Message = vbLf & "Einfügepunkt festlegen: "
            PPResu = ed.GetPoint(PPOpt)
            instPkt(0) = PPResu.Value.X : instPkt(1) = PPResu.Value.Y : instPkt(2) = PPResu.Value.Z
            '----------------------------------------------

            ''--Einfügen des zuvor erzeugten Blocks--!!
            Dim myBlockRef As New BlockReference(New Point3d(instPkt), TBschreiben("CircleBlock2"))
            TBschreiben.AppendEntity(myBlockRef)
            acTrans.AddNewlyCreatedDBObject(TBschreiben, True)
            '-----------------------------------------

            acTrans.Commit()
        End Using
    End Sub



Vielen Dank im Voraus.

------------------
Gruß

Dirk

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: 13. Nov. 2012 14:04    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 Dirk.B 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Dirk.B:

Dim TBschreiben As BlockTableRecord = acCurDb.BlockTableId.GetObject(OpenMode.ForWrite)
...
Dim myBlockRef As New BlockReference(New Point3d(instPkt), TBschreiben("CircleBlock2"))


TB-Schreiben ist vom Typ ein BlockTablerecord. Ich denke nicht, dass du über das Objekt die ObjectId des CircleBlock2 bekommst.
Anmerkung:
Deine Namensgebung der Variablen ist für das Lesen deines Beitrags nicht ideal.
Warum öffnest due die BlockTable 2 mal? (einmal TBlesen und einmal bei TBschreiben)

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