| | | 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
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 / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben:
|
Stelli1 Moderator Verm.-Ing.
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 / zitieren --> Unities abgeben: Nur für Gloem
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
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 / zitieren --> Unities abgeben:
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.
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 / zitieren --> Unities abgeben: Nur für Gloem
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
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 / zitieren --> Unities abgeben:
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.
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 / zitieren --> Unities abgeben: Nur für Gloem
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
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 / zitieren --> Unities abgeben:
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.
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 / zitieren --> Unities abgeben: Nur für Gloem
|
Gloem Mitglied Geoinformatiker
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 / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|