| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Komponenten Platzieren mit VBA (1431 mal gelesen)
|
djs0401 Mitglied Studierender
Beiträge: 20 Registriert: 18.02.2008 AutoCAD Mechanical 2007
|
erstellt am: 20. Feb. 2008 12:00 <-- editieren / zitieren --> Unities abgeben:
Hallo Habe da ein Problem: In der Firma in der ich grade ein Praktikum mache, soll ich ein Automatisiertes Layout Makro erstellen. Die Zeichnungen, die zusammen gefügt werden sollen sind als Komponenten gespeichert, d.h. 4 Ansichten in der Datei enthalten. Für die gewünschte Zeichnung brauch ich aber nur die draufsicht. Bisher habe ich diesen code benutzt: Code: Private Sub Platzieren(ByRef m() As maschine) Dim einfugPkt(0 To 2) As Double Dim blockObj As AcadBlockReference Dim dateipfad As String 'm() bekomm ich aus einem Unterprogramm aus einer Excel liste dateipfad = "C:\daten\Projekt Automatisiertes Layout\CadDWGs\" & m(2).bez & ".dwg" einfugPkt(0) = m(2).pos1 einfugPkt(1) = m(2).pos2 einfugPkt(2) = 0 Set blockObj = ThisDrawing.ModelSpace.InsertBlock(einfugPkt, dateipfad, 1#, 1#, 1#, 0) blockObj.Update MsgBox ("Komponente " & m(2).bez & " wurde platziert.") End Sub
Aber wenn ich dies auf die Dateien verwende, die mehrere Ansichten beinhalten, werden alle 4 Ansichten auf einmal platziert. Wie kann ich jetzt eine einzelne Ansicht aus einer Datei nehmen und platzieren? Danke schonmal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 20. Feb. 2008 12:24 <-- editieren / zitieren --> Unities abgeben: Nur für djs0401
...du kannst die Datei mittels dbx-Server öffnen und via der Methode copyobjects die entsprechenden Objekte in die aktuelle Zeichnung holen ... ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
djs0401 Mitglied Studierender
Beiträge: 20 Registriert: 18.02.2008 AutoCAD Mechanical 2007
|
erstellt am: 20. Feb. 2008 14:49 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 20. Feb. 2008 14:59 <-- editieren / zitieren --> Unities abgeben: Nur für djs0401
Zitat: Original erstellt von djs0401: hmm bin leider sehr AutoCAD unerfahren und Visual Basic muss ich auch noch einiges lernen... Könntest du da näher drauf eingehen, wie man das macht? Hoffe das es nicht allzu schwer ist ;-)
Nein kann ich nicht, da ich nicht in VBA bewandert bin, sondern eher in Lisp und da das doch eine etwas umfangreichere Sache ist, die einen Einsteiger, welcher nicht nur den Code zusammenkopieren will, IMHO überfordert. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - ACA 2013 Arcibem System: Windows NT, 2000, XP Internet-Startseite: http://www.archi.de
|
erstellt am: 20. Feb. 2008 15:24 <-- editieren / zitieren --> Unities abgeben: Nur für djs0401
Hi, wenn Du die Koordinaten der Ansichten kennst, dann könntest Du den eingefügten Block auch zuschneiden, um nur eine bestimmte Ansicht darzustellen. Der Block enthält dann zwar alle Ansichten, im Layout siehst Du aber nur den zugeschnittenen Bereich (= benötigte Ansicht). Grüsse, Henning ------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
djs0401 Mitglied Studierender
Beiträge: 20 Registriert: 18.02.2008 AutoCAD Mechanical 2007
|
erstellt am: 20. Feb. 2008 15:54 <-- editieren / zitieren --> Unities abgeben:
hmm Danke Wronzky ist zwar ne Lösung aber nicht wirklich eine saubere... da könnt ich ja gleich die draufsicht aus einer Komponente herauskopieren und in eine neue Zeichnung kopieren und diese dann laden. Sollte doch irgendwie möglich sein, die versch. Ansichten direkt zu kopieren/platzieren. 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: 20. Feb. 2008 16:13 <-- editieren / zitieren --> Unities abgeben: Nur für djs0401
Hallo, ich habe leider nicht verstanden was du machen willst. Zu ObjectDBX gibt es unter anderem hier einen Thread. Ich habe keine Ahnung was bei dir Komponenten sind. Mit Hilfe von ObjectDBX lassen sich eigentlich alle Objekte einer Zeichnung manipulieren oder in andere Zeichnungen kopieren. Der Vorteil ist, dass du bei der Variante mit ObjectDBX, die Zeichnung nicht im AutoCAD öffnen musst. Vielleicht beschreibst mal genauer wie das gehen soll. Sollen Daten kopiert werden, oder Layouts oder oder ... 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 |
djs0401 Mitglied Studierender
Beiträge: 20 Registriert: 18.02.2008 AutoCAD Mechanical 2007
|
erstellt am: 20. Feb. 2008 16:29 <-- editieren / zitieren --> Unities abgeben:
Hab deinen Link noch net angeschaut aber danke schonmal. Ich schau später mal. Es sollen einzelne Module/Bauteile aus verschiedenen Zeichnungen(die mehrere Ansichten enthalten, brauche aber nur die draufsicht) über das einlesen einer Stückliste zu einem Layout zusammengfügt werden. Einlesen der STL klappt. Es klappt nur nicht, dass ich aus den Zeichnungen die einzelne Ansicht herausziehen kann... Diese Ansichten sind nicht einfach zu einem Block zusammengefügt sondern in einzelnen Komponenten d.h. links am Navigator rechte Maustaste Neu -> Komponente... dann kann man eine Erstellen. Also zumindest bei AutoCAD 2007. Wenn du noch nicht weisst was ich meine kann ich auch ein Bild davon machen. Kann es nich besser erklären sorry. 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: 20. Feb. 2008 18:00 <-- editieren / zitieren --> Unities abgeben: Nur für djs0401
Hallo Namenloser, ich hab links keinen Navigator, ich hab rechts eine Darstellungsverwaltung Im RuA hast du ja auch schon mal deine AutoCAD Version angegeben. Hast du auch noch Zusatzprogramme ??? 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 |
djs0401 Mitglied Studierender
Beiträge: 20 Registriert: 18.02.2008 AutoCAD Mechanical 2007
|
erstellt am: 21. Feb. 2008 08:37 <-- editieren / zitieren --> Unities abgeben:
Sorry heisse Daniel ;-) Also ich hab jetzt mal ein Bildchen hinzugefügt. Darauf sind 2 Darstellungen/Ansichten. Links in meinem "Navigator" ist ein Ordner "Test" , dieser Ordner wird auch Komponente genannt.Die Zeichnung wird so abgespeichert. Jede Ansicht hat ihren eigenen Basispunkt. Nun möchte ich die Ansicht "DRA" über Visual Basic von dieser Zeichnung in eine andere Zeichnung laden. Und genau da ist das Problem. Mache ich es so, wie oben im CODE, dann wird aber auch die VOA(Vorderansicht) mitkopiert. Ich möchte aber nur die DRA kopieren. MFG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002
|
erstellt am: 21. Feb. 2008 08:50 <-- editieren / zitieren --> Unities abgeben: Nur für djs0401
Hi Daniel, So wie in deinem Makro im ersten Beitrag fügst du ja auch die komplette Zeichnung als Block in die aktuelle ein. Ist denn deine Ansicht ein eigener Block?! Der Navigator kommt ja aus dem Mechanical. Schau doch mal in die Hilfe, ob dort die Mechanical-Dinge beschrieben stehen. Hier sind eher weniger User, die auf Mechanical zurückgreifen können. Edit: Vielleicht hilft dir diese Seite weiter. Gruß, Carsten [Diese Nachricht wurde von Carsten1210 am 21. Feb. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
djs0401 Mitglied Studierender
Beiträge: 20 Registriert: 18.02.2008 AutoCAD Mechanical 2007
|
erstellt am: 21. Feb. 2008 09:53 <-- editieren / zitieren --> Unities abgeben:
|
djs0401 Mitglied Studierender
Beiträge: 20 Registriert: 18.02.2008 AutoCAD Mechanical 2007
|
erstellt am: 21. Feb. 2008 11:26 <-- editieren / zitieren --> Unities abgeben:
aber was mach dann stutzig macht ist warum dann die InsertBlock Methode funzt, wenn keine Blöcke in der Zeichnung sein sollen... Also irgendwie müssen ja dann doch Blöcke sein?! Nur halt hat der dann wahrscheinlich alles zu einem großen Block gemacht?! Keine Ahnung bin schon so verzweifelt, dass ich mir vllt. sogar für die Draufsichten eigene dateien erstelle... was bei über 2000 Zeichnungen dauern wird ;-( Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002
|
erstellt am: 21. Feb. 2008 11:49 <-- editieren / zitieren --> Unities abgeben: Nur für djs0401
|
djs0401 Mitglied Studierender
Beiträge: 20 Registriert: 18.02.2008 AutoCAD Mechanical 2007
|
erstellt am: 07. Mrz. 2008 16:59 <-- editieren / zitieren --> Unities abgeben:
Für die, die es interessiert... hab das jetzt so gemacht... leider keinen anderen weg gefunden: Hab aus jeder Datei meine Draufsicht rausgeholt und neu abgespeichert. Dann füge ich die Ansicht in meine Zeichnung ein mit: Code: Set blockObj = ThisDrawing.ModelSpace.InsertBlock(einfugPkt, Dateipfad, 1#, 1#, 1#, 0) blockObj.Update
Und dann erstelle ich aus diesem "Block" wieder eine Komponente, mit dem unschönen SendCommand: Code: ThisDrawing.SendCommand "_AMSCREATE" & vbCr & "K" & vbCr & NAME & i & vbCr & "DRA" & vbCr & "A" _ & vbCr & "LETZTES" & vbCr & vbCr & einfugPkt(0) & "," & einfugPkt(1) & vbCr
ist zwar nicht die eleganteste Lösung, aber mir ist keine bessere über den weg gelaufen! Wenn jemand was schöneres kennt, ohne den Umweg über blocks und/oder ohne SendCommand, dann lasst es mich wissen ^^ Grüsse EDIT: Habe grade eine Nachricht von Autodesk erhalten! Es gibt noch gar keine möglichkeut eine Komponente direkt von einer Datei in eine neue Zeichnug zu platzieren. Also ist mein Weg wohl der einzige...
[Diese Nachricht wurde von djs0401 am 11. Mrz. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |