| |
 | 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 PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: Makro für Modellbaum (2206 mal gelesen)
|
OngaBonga Mitglied student

 Beiträge: 10 Registriert: 03.11.2006
|
erstellt am: 08. Jan. 2010 22:43 <-- editieren / zitieren --> Unities abgeben:         
Sport Frei, Ich hab da folgendes Problem. Ich will ein Makro erstellen, welches das Bauteilende im Modellbaum über eine Benutzeroberfläche steuert (vor und zurück). Die Benutzeroberfläche habe ich mir bereits erstellt, nun möchte ich die "click" Prozeduren für "vor" und "zurück" definieren. Und genau das ist mein Problem. Kann da mir jemand vielleicht weiter helfen? (da es meine ersten VBA Schritte sind, hoffe ich nicht all zu dumm rüber zukommen) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Michael Puschner Ehrenmitglied V.I.P. h.c. Rentner

 Beiträge: 13008 Registriert: 29.08.2003 Toshiba Encore mit MS Office<P>Ein Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben. (Michael Anton)
|
erstellt am: 08. Jan. 2010 23:36 <-- editieren / zitieren --> Unities abgeben:          Nur für OngaBonga
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 09. Jan. 2010 13:23 <-- editieren / zitieren --> Unities abgeben:          Nur für OngaBonga
Hallo Was genau ist das Problem? Eine Sub die auf deinen "Vor"-Button reagiert müßte so aussehen: Code: Private Sub Vor_Click() hier den Code für's Verschieben des Bauteilendes End Sub
Soll das Bauteilende im Part oder in einer Baugruppe verschoben werden? In der BG gibt's mW nur die Optionen Top und Bottom, keine Zwischenschritte. Du kannst auch mal in der Programmierungshilfe von Inventor den Suchbegriff "Form" eingeben und dir den ersten Treffer mit dem SimpleSelection-Beispiel ansehen. ------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
OngaBonga Mitglied student

 Beiträge: 10 Registriert: 03.11.2006
|
erstellt am: 10. Jan. 2010 02:00 <-- editieren / zitieren --> Unities abgeben:         
erstmal Danke für Deine Antwort, mein Problem ist der "Code für's Verschieben des Bauteilendes". Vielleicht stelle ich mir das zu einfach vor, aber ich hab mir das wie folgt gedacht: 1.) if click auf "zurück" Then Bauteilende eine Position zurürck 2.) if click auf "vor" Then Bauteilende eine Position vor 3.) Bedingungen um Fehlermeldung zu vemeiden das Tool soll für den BauTeil-Modus sein. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 10. Jan. 2010 11:38 <-- editieren / zitieren --> Unities abgeben:          Nur für OngaBonga
Hallo Nein, der Klick auf den entsprechenden Button löst die zugehörige Sub aus. Du brauchst nicht zusätzlich prüfen, welcher Button gedrückt wurde. Um das Bauteilende zu verschieben, mußt du erstmal herausfinden wo es eigentlich gerade steht. Es ist ja nicht garantiert, das es zu Beginn immer ganz unten ist. Dazu benutzt du die Eigenschaft "HealthStatus" der einzelnen Bauteilfeature. Diese Eigenschaft hat bei allen Features unterhalb des EoP (EndofPart) den Wert "kBeyondStopNodeHealth". Läuft man in einer Schleife durch alle Feature, kann man feststellen wann dieser Wert zum ersten Mal auftritt. Naja, da kommt dann sowas bei raus: Code: Option ExplicitPrivate Sub EoP_Hoch() 'erstmal rausfinden wo EoP gerade steht Dim i As Integer i = 1 Dim oFeats As PartFeatures Set oFeats = ThisApplication.ActiveDocument.ComponentDefinition.Features Dim oFeat As PartFeature For Each oFeat In oFeats If oFeat.HealthStatus = kBeyondStopNodeHealth Then Exit For End If i = i + 1 Next If i = 1 Then MsgBox "EoP nicht weiter nach oben verschiebbar" Exit Sub End If 'Jetzt, wo wir die Position haben, können wir sie verschieben Set oFeat = oFeats.Item(i - 1) Call oFeat.SetEndOfPart(True) End Sub Private Sub EoP_Runter()
'erstmal rausfinden wo EoP gerade steht Dim i As Integer i = 0 Dim oFeats As PartFeatures Set oFeats = ThisApplication.ActiveDocument.ComponentDefinition.Features Dim oFeat As PartFeature For Each oFeat In oFeats If oFeat.HealthStatus = kBeyondStopNodeHealth Then Exit For End If i = i + 1 Next If i = oFeats.Count Then MsgBox "EoP nicht weiter nach unten verschiebbar" Exit Sub End If 'Jetzt, wo wir die Position haben, können wir sie verschieben Set oFeat = oFeats.Item(i + 1) Call oFeat.SetEndOfPart(False) End Sub
Das kann man sicher noch optimieren. Aber so ist es für Anfänger vielleicht leichter verständlich. ------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
OngaBonga Mitglied student

 Beiträge: 10 Registriert: 03.11.2006
|
erstellt am: 10. Jan. 2010 19:56 <-- editieren / zitieren --> Unities abgeben:         
|
hondaro Mitglied student
 Beiträge: 1 Registriert: 30.03.2010
|
erstellt am: 04. Apr. 2010 19:13 <-- editieren / zitieren --> Unities abgeben:          Nur für OngaBonga
Hallo ich wollte den Code mal ausprobieren aber bei mir klappt es nicht, ich benutzte aber auch Inventor 2010 in der 64bit Version und Windows 7. Er sagt immer Fehler 13 bei der Zeile Set oFeats = ThisApplication.ActiveDocument.ComponentDefinition.Features kann mir jeman helfen??? Private Sub back_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 'Wo ist BtE? Dim i As Integer i = 0 Dim oFeats As PartFeatures Set oFeats = ThisApplication.ActiveDocument.ComponentDefinition.Features Dim oFeat As PartFeature For Each oFeat In oFeats If oFeat.HealthStatus = kBeyondStopNodeHealth Then Exit For End If i = i + 1 Next If i = oFeats.Count Then MsgBox "EoP nicht weiter nach unten verschiebbar" Exit Sub End If 'Position gefunden, jetzt verschieben Set oFeat = oFeats.Item(i + 1) Call oFeat.SetEndOfPart(False) End Sub Private Sub forward_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 'Wo ist BtE? Dim i As Integer i = 1 Dim oFeats As PartFeatures Set oFeats = ThisApplication.ActiveDocument.ComponentDefinition.Features Dim oFeat As PartFeature For Each oFeat In oFeats If oFeat.HealthStatus = kBeyondStopNodeHealth Then Exit For End If i = i + 1 Next If i = 1 Then MsgBox "EoP nicht weiter nach oben verschiebbar" Exit Sub End If 'Position gefunden, jetzt verschieben Set oFeat = oFeats.Item(i - 1) Call oFeat.SetEndOfPart(True) End Sub ------------------ MfG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 05. Apr. 2010 09:13 <-- editieren / zitieren --> Unities abgeben:          Nur für OngaBonga
Hallo Du probierst es nicht zufällig in einer Baugruppe oder? Fehler 13 - Typen unverträglich deutet für mich darauf hin, das oFeats als PARTFeatures definiert ist und ThisApplication.ActiveDocument.ComponentDefinition.Features was anderes zurückliefert. Definiere doch mal z.B. vorher
Code:
Dim oApp as Application Set oApp = ThisApplication
und setze auf die Zeile des Fehlers einen Haltepunkt. Füge eine Überwachung für oApp hinzu und dann kannst du von oApp aus die Werte von ActiveDocument, ComponentDefinition und Features ansehen. ------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |