Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Einlesen von Blockdefinitionsdatei

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:  Einlesen von Blockdefinitionsdatei (1708 mal gelesen)
Gloem
Mitglied
Geoinformatiker


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

Beiträge: 179
Registriert: 07.12.2007

Intel(R) Core(TM) i7 930 @ 2,80GHz
4GB RAM, 300GB Velocity Raptor + 500GB Daten
NVIDIA Quadro FX1800<P>AutoCAD Map 2006 - AutoCAD Civil 2011, VBA, Dot-Net</p><P><p>Momentan nur AutoCAD Maop 2012 mit RXAutoImage und ACroPlot</p>

erstellt am: 29. Jan. 2008 11:01    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,


ich habe ein kleines Problem beim Einlesen meiner Blockdefinitionsdatei mit MEHREREN Blöcken.

Beim Öffnen des Formulars soll automatisch die Datei mit den Blöcken in die aktuelle Zeichnung eingebunden werden:

Code:
Set objXRef = ThisDrawing.ModelSpace.AttachExternalReference(FILE_BLOCKREFERENZ, "EVG", Point, 1, 1, 1, 0, False)

Beim ersten Öffnen funktioniert alles. Wird da Formular nun aber ein zweites mal geöffnet, bekomm ich ein Fehler das die Blockdefinitionsdatei nicht geöffnet werden kann.

Muss ich meine Blöcke anders in die Zeichnung importieren?

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

Gloem
Mitglied
Geoinformatiker


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

Beiträge: 179
Registriert: 07.12.2007

Intel(R) Core(TM) i7 930 @ 2,80GHz
4GB RAM, 300GB Velocity Raptor + 500GB Daten
NVIDIA Quadro FX1800<P>AutoCAD Map 2006 - AutoCAD Civil 2011, VBA, Dot-Net</p><P><p>Momentan nur AutoCAD Maop 2012 mit RXAutoImage und ACroPlot</p>

erstellt am: 29. Jan. 2008 11: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

Auch wenn ich nicht wirklich weiß was
Code:
ThisDrawing.Blocks.item("EVG").bind true

macht, benötige ich diese Zeile auch noch

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 29. Jan. 2008 11:13    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 Gloem 10 Unities + Antwort hilfreich

Hallo,

es sind wohl noch was wenig Informationen da.

    Was hast, du für ein AutoCAD ?

    Was ist das für eine Datei ? (ASCII, XLS ..)

    Was willst du erreichen ?

Bei der Anzeige des Formulars scheinst du auf deine externe Datei zuzugreifen. Diese wird geöffnet aber nicht wieder geschlossen so das du beim zweiten Mal eine Fehlermeldung bekommst.

Wilfried Stelberg

PS: Füll doch dein Profil bitte aus.

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

Gloem
Mitglied
Geoinformatiker


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

Beiträge: 179
Registriert: 07.12.2007

Intel(R) Core(TM) i7 930 @ 2,80GHz
4GB RAM, 300GB Velocity Raptor + 500GB Daten
NVIDIA Quadro FX1800<P>AutoCAD Map 2006 - AutoCAD Civil 2011, VBA, Dot-Net</p><P><p>Momentan nur AutoCAD Maop 2012 mit RXAutoImage und ACroPlot</p>

erstellt am: 29. Jan. 2008 11:22    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, mein Profil hab ich etwas bearbeitet, mal gucken ob es funktioniert  [Falls nein, ich programmiere in Visual Basic und nutze Map 2006 und 2008]


Ich habe eine Blockdefinitionsdatei erstellt in der ALLE benötigten Blöcke vorhanden sind. (DWG)

Über das Makro dass ich gerade programmiere sollen nur Punkte aus einer Textdatei importiert und als Blöcke dargestellt werden. Hierfür soll beim Öffnen des Programms alle Blöcke aus der Blockdatei in die aktuell geöffnete Datei importiert werden.

Importieren der Blockdefinitionsdatei

Code:
Set objXRef = ThisDrawing.ModelSpace.AttachExternalReference(FILE_BLOCKREFERENZ, "EVG", Point, 1, 1, 1, 0, False)
ThisDrawing.Blocks.item("EVG").Bind True

Importieren eines Punktes als Block

Code:
Dim blockReference As AcadBlockReference
Set blockReference = ThisDrawing.ModelSpace.InsertBlock(insertPoint, code, 1, 1, 1, 0)

Wie schließe ich die Blockdefinitiondatei wieder? Was passiert falls ein Block schon vorhanden ist und dieser nochmal importiert wird?

[Diese Nachricht wurde von Gloem am 29. Jan. 2008 editiert.]

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 29. Jan. 2008 11: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 Gloem 10 Unities + Antwort hilfreich

Hallo,

so langsam kommen wir der Sache näher.
Du fügst eine Datei als XREF ein. Mit .bind machst du sie zum Bestandteil deiner Zeichnung.
Wenn du das Brett an der dünnsten Stelle anbohrst speicherst du in einer globalen Variable ob du deine Prototypenzeichnung schon mal eingefügt hast oder nicht (Public vgbo_BlocksInserted as boolean).
So brauchst du beim zweiten Mal die Datei nicht mehr einfügen.

Wenn du es ordendlich machen willst, dann suchst du mal nach ObjectDBX und CopyObjects.
Damit kannst du eine DWG quasi virtuell öffnen und dir die Blockdefinitionen in die aktuelle Zeichnung importieren. Dabei kannst du es so machen, dass nicht alle Blöcke pauschal, sondern nur die notwendigen in die Zeichnung importiert werden.
Um zu prüfen ob ein Block schon vorhanden ist kannst dur dir eine Funktion machen. In der versuchst du in der Blockauflistung auf den Block mit dem gewünschten Namen zuzugreifen. Mit On Error Resume .. fängst du den Fehler ab wenn der Block noch nicht da ist.

Übrigens was für ein Visual Basic ? (VB6, VB.net2003,VB.net2005,VB.net2008, VBA ...)

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

Gloem
Mitglied
Geoinformatiker


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

Beiträge: 179
Registriert: 07.12.2007

Intel(R) Core(TM) i7 930 @ 2,80GHz
4GB RAM, 300GB Velocity Raptor + 500GB Daten
NVIDIA Quadro FX1800<P>AutoCAD Map 2006 - AutoCAD Civil 2011, VBA, Dot-Net</p><P><p>Momentan nur AutoCAD Maop 2012 mit RXAutoImage und ACroPlot</p>

erstellt am: 29. Jan. 2008 12:11    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

Kann das ganze so funktionieren:

Code:
    ' Bei Fehler -> Sprung zur Fehlermarke
    On Error GoTo err_Import_XRef

    Dim blockFile As New AxDbDocument
    blockFile.Open FILE_BLOCKREFERENZ

    Dim blockRef_File As AcadBlockReference
    Dim blockRef As AcadBlockReference
    Dim vorhanden As Boolean

    For Each blockRef_File In blockFile.Blocks
        vorhanden = False
        For Each blockRef In ThisDrawing.Blocks
            If (blockRef.name = blockRef_File.name) Then
                vorhanden = True
            End If
        Next
       
        If (Not vorhanden) Then
            ' IMPORTIEREN DES BLOCKES
        End If
    Next

    ' Bei Fehler -> Normales Verhalten
    On Error GoTo 0


Jetzt müsstest du mir nur noch kurz erklären wie ich jetzt eine Blockdefinition importiere ohne die Zeichnung einbinden zu müssen

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 29. Jan. 2008 12:41    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 Gloem 10 Unities + Antwort hilfreich

Hallo,
  
Zitat:
Jetzt müsstest du mir nur noch kurz erklären wie ich jetzt eine Blockdefinition importiere ohne die Zeichnung einbinden zu müssen


Dafür gibt es hier auch eine Suchfunktion  
Schau mal hier. In der DVB gibt es ein Beispiel wie aus einer externen DWG ein Block geladen wird. Ergänzt du das Ganze noch um die erwähnte Funktion, ob innerhalb der Zeichnung schon der Block vorhanden ist, bist du fast fertig.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.  
www.ib-stelberg.de

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

Gloem
Mitglied
Geoinformatiker


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

Beiträge: 179
Registriert: 07.12.2007

Intel(R) Core(TM) i7 930 @ 2,80GHz
4GB RAM, 300GB Velocity Raptor + 500GB Daten
NVIDIA Quadro FX1800<P>AutoCAD Map 2006 - AutoCAD Civil 2011, VBA, Dot-Net</p><P><p>Momentan nur AutoCAD Maop 2012 mit RXAutoImage und ACroPlot</p>

erstellt am: 29. Jan. 2008 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

Vielen Dank für Deine Hilfe. Hab nach einigem Suchen die benötigte Zeile in dem von Dir angegebenen Beitrag gefunden.

Hier nochmal das Endergebnis:

Code:
    ' Virtuelles Öffnen der Blockreferenzdatei
    Dim axBlockFile As New AxDbDocument
    axBlockFile.Open FILE_BLOCKREFERENZ

    ' Variablen zum Auslesen der Blöcke
    Dim blockNew As AcadBlock
    Dim block As AcadBlock

    'Feld mit den neuen Blöcke
    Dim newBloecke() As Object

    Dim vorhanden As Boolean
    Dim anzahlBloecke As Integer
    anzahlBloecke = 0

    ' Für alle Blöcke in der Referenzdatei
    For Each blockNew In axBlockFile.Blocks
        ' Setzen der Flag
        vorhanden = False

        ' Für alle Blöcke in der aktuellen Zeichnung
        For Each block In ThisDrawing.Blocks
            ' Wenn Block vorhanden -> Setzen des Flags
            If (block.name = blockNew.name) Then
                vorhanden = True
            End If
        Next

        ' Eintragen des Blockes in das Feld mit den zu importierenden Blöcken
        If (Not vorhanden) Then
            ReDim Preserve newBloecke(anzahlBloecke)
            Set newBloecke(anzahlBloecke) = blockNew
            anzahlBloecke = anzahlBloecke + 1
        End If
    Next

    ' Wenn Blöcke zu importieren sind
    If (anzahlBloecke > 0) Then
        axBlockFile.CopyObjects newBloecke, ThisDrawing.ModelSpace
    End If


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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 29. Jan. 2008 15:12    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 Gloem 10 Unities + Antwort hilfreich

Na super. Jetzt schleppst du auch nicht allen "Mist" aus der Vorlage mit.
Jetzt noch die Blöcke an der richtigen Stelle eingefügt ... und fertig.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

Gloem
Mitglied
Geoinformatiker


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

Beiträge: 179
Registriert: 07.12.2007

Intel(R) Core(TM) i7 930 @ 2,80GHz
4GB RAM, 300GB Velocity Raptor + 500GB Daten
NVIDIA Quadro FX1800<P>AutoCAD Map 2006 - AutoCAD Civil 2011, VBA, Dot-Net</p><P><p>Momentan nur AutoCAD Maop 2012 mit RXAutoImage und ACroPlot</p>

erstellt am: 04. Feb. 2008 15:14    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

Ich muss noch mal nerven:

Ich hatte bislang für das AxDbDocument die AutoCAD/ObjectDBX Common 16.0 Type Library unter AutoCad Map 2006 verwendet.

Nach einem neu-aufsetzen des Systems(neue Workstation) lief es nicht auf anhieb. Erst nach einigem hin und her bei den Verweisen wollte es dann doch, wohlgemerkt unter Map 2006. Nach einem Test unter Map 2008 versagt das Programm jedoch. Auch die neuere Common 17.0 Type Libray verweigert den Dienst da die Methode CopyObjects wohl so nicht implementiert ist. (Fehler: für diesen Proxy nicht zugelassen)

Kann mir jemand sagen wie ich das am schlauesten repariere? Hier die beiden Zeilen die Probleme machen:

Code:
Dim axBlockFile As New AxDbDocument

Code:
Dim newBloecke() As Object
axBlockFile.CopyObjects newBloecke, ThisDrawing.ModelSpace

[Diese Nachricht wurde von Gloem am 04. Feb. 2008 editiert.]

[Diese Nachricht wurde von Gloem am 04. Feb. 2008 editiert.]

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

Gloem
Mitglied
Geoinformatiker


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

Beiträge: 179
Registriert: 07.12.2007

Intel(R) Core(TM) i7 930 @ 2,80GHz
4GB RAM, 300GB Velocity Raptor + 500GB Daten
NVIDIA Quadro FX1800<P>AutoCAD Map 2006 - AutoCAD Civil 2011, VBA, Dot-Net</p><P><p>Momentan nur AutoCAD Maop 2012 mit RXAutoImage und ACroPlot</p>

erstellt am: 05. Feb. 2008 07:25    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

Scheint sich mit der Installation des Service-Packs erledigt zu haben

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