Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Fehlermeldung bei XREF einbinden

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:  Fehlermeldung bei XREF einbinden (659 mal gelesen)
tappenbeck
Mitglied
Vermessungsingenieur


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

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 24. Mrz. 2020 07: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

Moin!

ich möchte XREF-Dateien einbinden.

Hierzu habe ich eine Vorlage auf https://www.theswamp.org/index.php?topic=31863.0 gefunden und nach vb.net konvertiert.

Mein Code, wo ich das Abfragen des Einfügepunktes durch einen Übergabeparameter ersetzt habe, sieht wie folgt aus:

Code:

Imports System.IO
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry

Public Class XRef
    Private _AcLog As EBL.AcadLogger.AcLog
    Private _TryReport As New EBL.Logger.TryCatchReport
    Public Sub New(AcLog As EBL.AcadLogger.AcLog)
        If Not IsNothing(AcLog) Then _AcLog = AcLog
    End Sub
    ''' <summary>
    ''' Xref(s) anhängen
    ''' </summary>
    ''' <param name="fileNames">Dateinamen</param>
    ''' <param name="XrefLayer">optional aus welchem Layer ablegen (default:= 0)</param>
    ''' <param name="InsertPoint">optional Einfügepunkt (default:= nothing ... 0,0,0)</param>
    Public Sub attach(ByVal fileNames As String(), Optional XrefLayer As String = "0", Optional InsertPoint As Point3d = Nothing)
        Dim Editor As Autodesk.AutoCAD.EditorInput.Editor
        Dim acDoc As Autodesk.AutoCAD.ApplicationServices.Document
        '--- aus https://www.theswamp.org/index.php?topic=31863.0
        acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
        Dim acDb As Database = acDoc.Database
        Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor

        If IsNothing(InsertPoint) Then ' wenn keiner angegeben wird, dann 0,0,0
            InsertPoint = New Point3d(0, 0, 0)
        End If

        Array.Sort(fileNames)
        Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database
        Dim dimScale As Double = db.Dimscale

        For Each fileName As String In fileNames
            Try
                ''Dim options As PromptPointOptions = New PromptPointOptions("Pick insertion point for " & fileName & ": ")
                ''options.AllowNone = False
                ''Dim pt As PromptPointResult = Editor.GetPoint(options)
                ''If pt.Status <> PromptStatus.OK Then Continue For
                Dim xrefScale As Double = getDwgScale(fileName)
                Dim scaleFactor As Double = dimScale / xrefScale

                Using tr As Transaction = Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction()
                    Dim xrefId As ObjectId = db.AttachXref(fileName, Path.GetFileNameWithoutExtension(fileName))
                    Dim blockRef As BlockReference = New BlockReference(InsertPoint, xrefId)
                    Dim layoutBlock As BlockTableRecord = CType(tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite), BlockTableRecord)
                    blockRef.ScaleFactors = New Scale3d(scaleFactor, scaleFactor, scaleFactor)
                    blockRef.Layer = XrefLayer
                    layoutBlock.AppendEntity(blockRef)
                    tr.AddNewlyCreatedDBObject(blockRef, True)
                    tr.Commit()
                End Using
            Catch ex As Exception
                _TryReport.Show("unerwarteter Fehler in EBL.Acad > EBL_XREF > attach", "Filename:= " & fileName, ex.ToString, Log:=_AcLog)

            End Try
        Next
    End Sub
    Private Function getDwgScale(ByVal fileName As String) As Double
        Using db As Database = New Database(False, True)
            db.ReadDwgFile(fileName, FileOpenMode.OpenForReadAndAllShare, False, String.Empty)
            Return db.Dimscale
        End Using
    End Function

End Class


Ich bekomme für die Zeile

Code:
Dim xrefId As ObjectId = db.AttachXref(fileName, Path.GetFileNameWithoutExtension(fileName))

Eine Fehlermeldung:
Autodesk.AutoCAD.Runtime.Exception: eFileAccessErr
  bei Autodesk.AutoCAD.DatabaseServices.Database.AttachXref(String fileName, String blockName)
  bei EBL.Acad.XRef.attach(String[] fileNames, String XrefLayer, Point3d InsertPoint) in C:\VSProjects\2019\EBL.Acad\EBL.Acad\EBL_XRef.vb:Zeile 46.

Hat einer von Euch eine Idee?

Gruß Jan

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: 24. Mrz. 2020 08:47    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 tappenbeck 10 Unities + Antwort hilfreich

e File Access
Error Datei Zugriff

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

tappenbeck
Mitglied
Vermessungsingenieur


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

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 24. Mrz. 2020 08: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

Moin Holger,

ich habe noch

Zitat:
If System.IO.File.Exists(fileName) = False Then
                    MsgBox("Datei nicht gefunden!")
                Else If System.IO.File.Exists(fileName) = False Then
                    MsgBox("Datei nicht gefunden!")
                Else

ergänzt und die Msgbox kommt nicht und damit muss die Datei verfügbar sein.

Eine Datei die man einfügen will kann doch anderweitig geöffnet sein. Ansonsten ist mir nicht klar, warum ein Access-Error vorliegen könnte.

In den Dateieigenschaften ist Lesen und Ausführen angehakt.

Gruß Jan

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