| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: STL Export und Koordinatenausgabe mit VBA (1963 mal gelesen)
|
wikie23 Mitglied
 Beiträge: 4 Registriert: 21.01.2015
|
erstellt am: 22. Jan. 2015 07:18 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich bin bei der Suche nach einer Lösung für meine AutaCAD Probleme auf dieses super Forum gestoßen und habe mich deshalb gleich angemeldet. Haupsächlich beschäfftige ich mich beruflich mit CFD-Simulationen benötige aber zur Modelerstellung AutoCAD. Ich bin daher kein Profi im Umgang mit AutoCAD aber ein blutiger Anfänger bin ich auch nicht mehr. Nun aber zu meinem Problem. Ich muss häufiger einige hundert Objekte als stl Datei exportieren. Bisher mache ich das immer im ersten Schritt mit AutoCAD und exportiere alle benötigten Objekte auf einmal - einzeln auswählen der Objekte fällt aufgrund der Anzahl leider aus. Nachteil daran ist das sich alle Objekte in einer stl-Datei befinden. Im nächsten Schritt zerlege ich diese stl-Datei mit einem anderen Program in einzelnen stl-Dateien. Meine Idee war nun mit Hilfe von VBA mir direkt aus AutoCAD diese Objekte einzeln als stl zu exportieren. Schön wäre dabei die stl-Datei mit einem eindeutigen Namen für jedes einzelne Objekt zu versehen. Ich habe dabei an 'Layername+Laufende Nummer.stl' gedacht. Leider bin ich mit VBA noch nicht so fit das ich trotz Suche noch nicht auf eine Lösung gekommen bin. Könnt ihr mir dabei ein kurze Hilfestellung geben. Zusätzlich zu dieser Ausgabe würde ich auch noch die Koordinaten der exportierten 3D Objekte benötigen. Richtig geil wäre die Ausgabe in eine Excel Datei welche die Spalten x,y,z und stl-Name mit den jeweiligen objektbezogenen Einträgen enthält. Was meint Ihr, ist das Ganze mit VBA umsetztbar? Könnt ihr mir ein paar Tipps geben wie ich an die Sache ran gehen kann und vielleicht ein paar Beispiele mit ähnlichen Problemen posten um mir eine kurze Starthilfe zu geben. Vielen Dank im Vorraus Roman
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH

 Beiträge: 4191 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 22. Jan. 2015 12:16 <-- editieren / zitieren --> Unities abgeben:          Nur für wikie23
Hallo und herzlich willkommen, wie fundiert sind deine VBA-Kenntnisse jenseits von AutoCAD? Hapert es nur an der Unkenntnis der VBA-API des AutoCAD? Mit VB lässt sich das sicher realisieren, sicher auch mit anderen Programmiersprachen. 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 |
wikie23 Mitglied
 Beiträge: 4 Registriert: 21.01.2015
|
erstellt am: 22. Jan. 2015 13:17 <-- editieren / zitieren --> Unities abgeben:         
Hallo Holger, vielen Dank für deine schnelle Antwort. Meine VBA Kenntnisse sind noch sehr rudimentär. Ich arbeite mich gerade in dieses Thema ein. VBA sollte aber kein Problem sein, da ich zur Zeit Hilfe von einem Kollegen habe der sich mit VBA wirklich sehr sehr gut auskennt, aber keine Ahnung von AutoCAD hat. Wenn ich ein paar Tipps für die richtige Vorgehensweise mit der VBA-API bekommen kann und den einen oder anderen VBA Befehl wenn es dann doch mal hängt, denke ich das wir das Ganze umsetzten können. besten Dank Roman Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 22. Jan. 2015 14:28 <-- editieren / zitieren --> Unities abgeben:          Nur für wikie23
Hallo Roman, Soweit mir bekannt ist gibt es keine spezielle VBA-Routine zum Schreiben von STL-Dateien, Du müßtest also über den Befehl: Code: ThisDrawing.SendCommand "-STLOUT N " & strDateiname
gehen. "N" bewirkt dass keine binäre Datei geschrieben wird Davor wäre es sinnvoll den PickFirstSelectionSet (ist bereits vordefiniert) mit dem entsprechenden Objekt zu füllen, ansonsten käme eine Abfrage in der Befehlszeile zur Auswahl der Objekte. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wikie23 Mitglied
 Beiträge: 4 Registriert: 21.01.2015
|
erstellt am: 22. Jan. 2015 15:17 <-- editieren / zitieren --> Unities abgeben:         
Hallo Klaus, danke für deine Antwort. Da ich mehrerer hundert 3D solids auf einer Zeichnung habe müsste ich diesen Befehl in eine Routine einbauen die mir jedes einzelne Objekt der Reihe nach auswählt und dann eine stl-Datei hierfür exportiert. Hast du auch noch einen Tip für mich wie ich dies berwerkställigen kann? Besten Dank Roman Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 22. Jan. 2015 15:54 <-- editieren / zitieren --> Unities abgeben:          Nur für wikie23
Hallo Roman, für den Anfang kannst du dir mal die Beispiele aus deiner AutoCAD Installation ansehen, weiter gibt es jede Menge Beispiele hier im Forum. Du überlegst dir vorher ob du wirklich alle Elemente aus dem Modelbereich oder doch erst eine Auswahl (Selectionset) treffen willst. Dann geht's du in einer Schleife alle Elemente durch, prüfst ob die den passenden Datentyp haben, und machst deinen Export. Oder suchtest du jemanden der es für dich umsetzt? 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 |
wikie23 Mitglied
 Beiträge: 4 Registriert: 21.01.2015
|
erstellt am: 22. Jan. 2015 16:19 <-- editieren / zitieren --> Unities abgeben:         
Hallo Wilfried, ich muss alle Elemente eines bestimmten Layers über diesen Weg exportieren. Das mit der Schleife ist ein guter Tip. Ich möchte auf jeden Fall das Ganze selbst umsetzten da ich daran noch weitere Veränderungen vornehmen möchte und dies nicht kann wenn ich keine Ahnung von dem Ganzen habe. Das von mir angesprochene soll mir dabei als Grundgerüst dienen, das ich dann beliebig an unsere Bedürfnisse anpassen kann. Bisher habe ich noch nichts in der Art gemacht, weshalb ich auch etwas unbeholfen bin. besten Dank Roman Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 22. Jan. 2015 17:51 <-- editieren / zitieren --> Unities abgeben:          Nur für wikie23
Hallo Roman, Wie Du schon geschrieben hast, es ist durchaus sinnvoll sich selber mit der Problematik zu beschäftigen. Gerade die Auswahl über SelectionSet ist nicht ganz einfach aber in der Onlinehilfe im Benutzerhandbuch "Entwicklerhandbuch für ActivX und VBA" recht gut erklärt. Solltet Ihr noch ältere Versionen installiert haben (z.B. 2008) könntest Du Dir das \Help - verzeichnis kopieren und über die acad171.chm die entsprechenden Kapitel suchen. Die neueren Online-Hilfen sind da wesentlich unübersichtlicher  Um Dir die Programmierung ein wenig zu erleichtern: Typische Werte für eine Auswahlbildung sind z.B. FilterTyp "0" für die Elementauswahl mit dem zugehörigen FilterDatenWert "3DSOLID" wie Du ihn hier verwenden möchtest FilterTyp "8" wären zum Beispiel Layernamen, entweder als ein Wert angegeben oder als Liste mit Kommatrennung FilterTyp "67" der Arbeitsbereich mit "0" für Modell bzw "1" für Layout Etwas Vorsicht ist bei den Mode SelectOnScreen oder SelectWindow geboten, kann schon mal passieren dass dabei nicht alles ausgewählt wird wenn vorher der entsprechende Ausschnitt neu gezeichnet wurde. Aber Du wirst vermutlich als Mode den acSelectionSetAll verwenden. Einen SelectionSet durchsuchen könnte man zwar auch mit einer FOR i = 0 to SelectionSet.Count ... Next Schleife möglich, üblicherweise verwendet man aber eine For each obj in Selectionset ... Next Anweisung, die auch schneller ist. Wenn Du Problem mit dem Code hast, kannst Du ihn gerne hier einstellen. Dürften ja nur ein paar Zeilen werden  Grüße Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |