| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
|
Autor
|
Thema: Material herauslesen (1634 mal gelesen)
|
floe Mitglied Application Engineer

 Beiträge: 32 Registriert: 22.03.2004
|
erstellt am: 18. Okt. 2006 09:54 <-- editieren / zitieren --> Unities abgeben:         
Hallo Zusammen Ich bin ganz neu in der AutoCAD/MCAD Programmierung. Nun muss ich per Externe VB6 dll das zugeordnete Material eines Blocks (heisst das soviel ich weiss) herauslesen können. habe mich mal in der McadVBA Doku versucht schlau zu machen, aber leider ohne Erfolg. Kann mir da jemand helfen? Was ich schon herausbekommen habe: In der Doku wird immer von ThisDrawing gesprochen.. aber dies konnte ich umgehen: Code: Dim oAcadApp As AcadApplication Dim oAcadDoc As AcadDocument Set oAcadApp = GetObject(, "AutoCAD.Application") Set oAcadDoc = oAcadApp.ActiveDocument
Nun weiss ich aber nicht mehr weiter. ich habe zwei Ansätze: 1. Entweder über McadComponent, mit welchem ich dann 'MassProperties' aufrufe oder 2. Über das BOM(Mgr) Objekt... aber bei beiden komme ich nicht wirklich weiter.. Wäre froh wenn mir jemand einen Tip geben könnte Gruss Tobias 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: 18. Okt. 2006 10:42 <-- editieren / zitieren --> Unities abgeben:          Nur für floe
Hallo Tobias, herzlich willkommen im VBA (für AutoCAD) Forum. Ich bin ein wenig verwundert über den Begriff Mcad. Was verstehst du darunter ? Bei AutoCAD solltest du mal in der Hilfe nach dem Objektmodell schauen. Du hast schon richtig das Application Objekt und dem untergeordnet das Document Object. Darunter findest du die Objekte Modelspace mit den Zeichnungsinhalten und den Paperspace mit den Layouts. Für dich ist der Modelspace der richtige. AcadApp.Activedocument.Modelspace Darunter sind alle Elemente (Entitys) aufgelistet. Die kannst du zum Beispiel mit einer Schleife (for each Entity in AcadApp.Activedocuent.Modelspace) durchlaufen und die Eigenschaften lesen und schreiben. Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 18. Okt. 2006 14:01 <-- editieren / zitieren --> Unities abgeben:          Nur für floe
|
floe Mitglied Application Engineer

 Beiträge: 32 Registriert: 22.03.2004
|
erstellt am: 18. Okt. 2006 16:16 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stelli Erstmal danke für die nette Begrüssung. Leider bin ich aber nicht weiter gekommen. Die Schleife durch die AcadEntity's spuckt genau 1 Entity heraus. .ObjectName --> 'AcAmCompEntClone' .ObjectID --> '2127880920' .PlotStyleName --> 'ByLayer' Hier der komplette Code:
Code:
Dim oAcadApp As AcadApplication Dim oAcadDoc As AcadDocument Dim entity As AcadEntitySet oAcadApp = GetObject(, "AutoCAD.Application") Set oAcadDoc = oAcadApp.ActiveDocument For Each entity In oAcadApp.ActiveDocument.ModelSpace Debug.Print entity.ObjectId Debug.Print entity.ObjectName Debug.Print entity.PlotStyleName Next
Analog zu dem sollte ja über den paperspace den Massstab und die Blattgrösse herausgelesen werden können!? Tobias noch zu MCAD: wie lautet dann die korrekte Bezeichnung für Mechanical desktop? Blicke da noch nicht ganz durch.. es sind 2 verschiedene Applikationen, aber eben doch nicht Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 18. Okt. 2006 16:45 <-- editieren / zitieren --> Unities abgeben:          Nur für floe
die Blattgröße kannst du durch auslesen der Sysvars LIMMIN / LIMMAX im Layout erhalten.. aber auch im entsprechenden Dictionary findest du die gespeicherten Werte.. Zum Maßstab... der hängt eigentlich an den einzelnen Viewports, aber vielleicht hilft dir (amggetdwgsetting "SCALE") für die Befehlszeile weiter... ------------------ - 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 |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 18. Okt. 2006 18:48 <-- editieren / zitieren --> Unities abgeben:          Nur für floe
Hallo Tobias, der Code liest alle Zeichnungselemente des Modelspace. Vielleicht hast du nur ein Element drin ? Mcad nennt sich hier wohl MDT. (Meint der Vermesser mit MAP)
Code: Dim oAcadApp As AcadApplication Dim oAcadDoc As AcadDocument Dim oEntity As AcadEntity Dim oModelSpace As AcadModelSpaceSet oAcadApp = GetObject(, "AutoCAD.Application") Set oAcadDoc = oAcadApp.ActiveDocument Set oModelSpace = oAcadDoc.ModelSpace Debug.Print "Anzahl Entity's: " & oModelSpace.Count For Each oEntity In oModelSpace Debug.Print oEntity.ObjectID Debug.Print oEntity.ObjectName Debug.Print oEntity.PlotStyleName Next
Stelli------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
floe Mitglied Application Engineer

 Beiträge: 32 Registriert: 22.03.2004
|
erstellt am: 20. Okt. 2006 11:21 <-- editieren / zitieren --> Unities abgeben:         
leider komme ich nicht weiter, bin glaub ein bisschen zu blöd  habe keine ahnung wie ich von den AcadEntity's auf den Materialnamen (zB. AlMgSi1) komme.. wäre um ein paar konkrete Codezeilen dankbar.. für die Blattgrösse hat der Ansatz über LIMMIN / LIMMAX gut geklappt, danke CADmium. Allerdings mit dem Massstab klappts auch noch nicht so richtig. Representieren die ViewPorts die (Erst)ansichten? Vieleicht noch ein kleines Wort zm Background dieser Probleme: Ich benötige diese Angaben um diese im PDM System abzulegen. Bei einem Save sollen diese Werte gemappt werden. Danke an alle die sich Zeit nehemen für mich. gruss Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
floe Mitglied Application Engineer

 Beiträge: 32 Registriert: 22.03.2004
|
erstellt am: 20. Okt. 2006 15:21 <-- editieren / zitieren --> Unities abgeben:         
bin doch einen schritt weiter gekommen.. für alle die wissen wollen wie man ganz simpel den Massstab herausbekommen will: Code:
Dim layouts As McadLayouts Dim layout As McadLayout Dim oMcadViews As McadDrawingViews Dim oMcadView As McadDrawingView 'Get Layouts in Drawing Set layouts = oMcadDoc.DrawingMgr.layouts For Each layout In layouts 'Get Views in Layout Set oMcadViews = layout.Views For Each oMcadView In oMcadViews 'Debug.Print "Scale: " & oMcadView.Descriptor.ViewScale Next Next
jetzt fehlt mir nur noch das Maetrial gruss Tobias 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. Okt. 2006 12:07 <-- editieren / zitieren --> Unities abgeben:          Nur für floe
Hallo Tobias, ich kann dir da nicht weiter helfen da Map nicht über die MDT Objekte verfügt. Ich würde versuchen mit GetObject ein Objekt (Bauteil) auszuwählen das mit einer Materialangabe versehen ist. Danach setzt du ein Break in der IDE und schaust mit Shift+F9 im Überwachungsfenster nach den Eigenschaften des Objektes. Vielleicht wirst du ja fündig. Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |