| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | |  | myCADtools , eine App
|
Autor
|
Thema: API Unterdrücken (4707 mal gelesen)
|
kons92 Mitglied Konstrukteur

 Beiträge: 91 Registriert: 07.12.2009 i920,6GB DDR3,FX3500 SW2011 SP1.0 Win7 64Bit
|
erstellt am: 18. Nov. 2010 15:08 <-- editieren / zitieren --> Unities abgeben:         
Hallo an alle, ich bin momentan dabei ein Makro zu schreiben, welches ich in Excel ausführe und anschließend passt dieses aufgrund der Tabelle in Excel mein SolidWorks Teil an. Leider habe ich momentan noch Probleme mit Feature unterdrücken/unterdrücken aufheben. Hier mal ein Auszug meines Codes: Code:
Part.Parameter("D3@Muster@Test.Assembly").SystemValue = Excel.Range("B7") * 0.001Sheets("EinAusgabe").Select If (test1 < 0.2) Then boolstatus = Part.Extension.SelectByID2("Platte@Test", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) boolstatus = Part.Extension.SelectByID2("Testteil@Test", "COMPONENT", 0, 0, 0, True, 0, Nothing, 0) Part.EditUnsuppress2 Part.ClearSelection2 True Else
Doch leider funktioniert dies nicht so gut, da ich Probleme mit der Unterdrückung z.B. in der Koniguration Flat Pattern (abwicklung) habe. Dort sind die Feature zum Teil unterdrückt und in der Standard Konfiguration nicht oder umgekehrt. Hat vielleicht einer der API Experten hier einen Rat für mich, wie ich das ändern kann.Vielen Dank im voraus, KONS 92 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kons92 Mitglied Konstrukteur

 Beiträge: 91 Registriert: 07.12.2009 i920,6GB DDR3,FX3500 SW2011 SP1.0 Win7 64Bit
|
erstellt am: 19. Nov. 2010 00:33 <-- editieren / zitieren --> Unities abgeben:         
Ich habe in einem anderen Forum http://www.eng-tips.com/viewthread.cfm?qid=242847&page=92 einen ähnlichen Beitrag gefunden. Leider habe ich diesen nicht verstanden bzw. ändern können. Vielleicht kann einer von euch mir helfen und den Code anpassen / erklären. Ist "default" der Konfigurationsname?? Wofür stehen die 1 und die 2 ? Wie muss man den den Code verändern das er funktioniert, da ich momentan leider eine Fehlermeldung bekomme beim Ausführen und nicht weiß, wie ich die Anpassung PartDoc::FeatureByName durchführen kann. Vielen Dank im voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 19. Nov. 2010 10:00 <-- editieren / zitieren --> Unities abgeben:          Nur für kons92
Hallo kons92, ich bin noch nicht dahinter gestiegen, was du tun möchtest. Du möchtest Features unterdrücken. Sind diese Features im aktuellen Modell (Baugruppe oder Teil), oder in einer Komponente? Dein Beispielcode aus dem ersten Beitrag selektiert nach meinem Verständnis eine Komponente und hebt die Unterdrückung auf. Was das Ganze dann für Probleme mit einer Konfiguration aufwirft verstehe ich auch nicht, unabhängig von einer Abwicklung oder nicht. Und dann zum zweiten Beitrag: du hast deinen Code jetzt irgendwie verändert, dass du statt SelectById2 lieber PartDoc::FeatureByName zum selektieren verwenden möchtest. Du kannst auch mit SelectById2 ein Feature selektieren, dann musst du aber den Selektionstyp entsprechend ändern. Beispiel: Part.Extension.SelectByID2("Schnitt-Linear austragen2@komponente@baugruppe", "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) Und was welcher Parameter bei Feature::ISetSuppression2 bedeutet steht in der API Hilfe, allerdings nicht als Zahl sondern als Konstanten, die man eben viel besser lesen kann. Also beim momentanen Stand der Aufgabenstellung kann ich dir leider noch nicht weiterhelfen. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kons92 Mitglied Konstrukteur

 Beiträge: 91 Registriert: 07.12.2009 i920,6GB DDR3,FX3500 SW2011 SP1.0 Win7 64Bit
|
erstellt am: 19. Nov. 2010 12:54 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank Stefan für die Antwort. Ich formuliere mein Problem mal nochmal. Ich habe eine Baugruppe, welche geöffnet ist, wenn das Makro gestartet wird. Nun möchte ich ein Feature eines Teiles der Baugruppe unterdrücken. Wenn ich dies mit meinem Code mache, unterdrückt er das Feature des Teiles auch erfolgreich. Allerdings nur in der Konfiguration, welche in der Baugruppe aktiv ist und nicht in allen anderen Konfigurationen des Teils. Dies möchte ich ändern. Es soll das Feature durch das Makro in allen Konfigurationen des Teils unterdrückt oder nicht unterdrückt werden. Ich habe mal den Code angepasst:
Code:
Sub main() Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Set swApp = CreateObject("SldWorks.Application") Set Part = swApp.ActiveDoc boolstatus = Part.Extension.SelectByID2("Schnitt-Linear austragen2@Komponente@Baugruppe", "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) boolstatus = Part.ISetSuppression2(1, 2, 1, "Standard") End Sub
Es wird erfolgreich das angegebene Feature in dem Teil selektiert. Doch leider bekomme ich den Fehler 438 Laufzeitfehler Objekt unterstützt diese Eigenschaft oder Methode nicht. Er bleibt dann in der Zeile mit Part.ISetSuppression2 stehen. Ich habe darufhin die Zeile verändert
Code:
boolstatus = ISetSuppression2(1, 2, 1, "Standard")
Doch dann bekomme ich als Fehlermeldung : Sub oder Function nicht definiertVielen Dank im voraus
[Diese Nachricht wurde von kons92 am 19. Nov. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 19. Nov. 2010 14:06 <-- editieren / zitieren --> Unities abgeben:          Nur für kons92
Hallo kons92, ja, die Fehlermeldung ist verständlich  Zunächst weist du der Objektvariablen Part das aktive Dokument zu, also deine Baugruppe zu (vielleicht solltest du die Variable besser AssemblyDoc oder so nennen, vielleicht wird es dann schon logischer). Dann selektierst du das Feature in einer Komponente. Deine Komponente heißt Komponente und deine offene Baugruppe Baugruppe, un ddu selektierst darin das Feature Schnitt-Linear austragen2. So weit so gut. Dann versuchst du für das Objekt Part (also deine offene Baugruppe) die Methode ISetSuppression2 auszuführen. Kann ja auch nicht klappen, du willst ja das Feature unterdrücken. Da die Baugruppe als ModelDoc2 Objekt keine Methode ISetSuppression2 kennt kommt die Fehlermeldung. Du brauchst also das eigentliche Featureobjekt, das müsstest du mit SelectionMgr::GetSelectedObject6 bekommen können (nach dem Selektieren). Auf das Featureobjekt kannst du dann das ISetSuppression2 anwenden. Das könnte ungefähr so aussehen: Code: ' ****************************************************************************** ' Beispielcode: Unterdrückung aufheben eines benannten Features in einer ' Komponente in allen Konfigurationen der Komponente ' ' Stefan Berlitz 19.11.2010 ' http://solidworks.cad.de ' http://swtools.cad.de ' ******************************************************************************'Public Enum FeatureSuppressionAction_e Const swSuppressFeature = 0 Const swUnSuppressFeature = 1 Const swUnSuppressDependent = 2 'Public Enum InConfigurationOpts_e Const swConfigPropertySuppressFeatures = 0 Const swThisConfiguration = 1 Const swAllConfiguration = 2 Const swSpecifyConfiguration = 3 Const swLinkedToParent = 4 Sub main() Dim swApp As Object 'SldWorks.SldWorks Dim AssemblyDoc As Object 'SldWorks.ModelDoc2 Dim Feature As Object 'SldWorks.Feature Dim boolstatus As Boolean ' an SolidWorks anhängen Set swApp = Application.SldWorks ' aktuelle Baugruppe holen Set AssemblyDoc = swApp.ActiveDoc ' Feature in einer Komponente per Namen auswählen boolstatus = AssemblyDoc.Extension.SelectByID2("Linear austragen1@Komponente@Baugruppe", "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) ' das selektierte Feature holen Set Feature = AssemblyDoc.SelectionManager.GetSelectedObject6(1, 0) ' und dann dieses Feature in allen Konfigurationen Unterdrückung aufheben ' für early binding kann ISetSuppression2 genutzt werden 'boolstatus = Feature.ISetSuppression2(swUnSuppressFeature, swAllConfiguration, 0, "") ' für late binding das "normale" SetSuppression2 ' Danke an d_b (siehe unten) für's finden boolstatus = Feature.SetSuppression2(swSuppressFeature, swAllConfiguration, "") End Sub
Du siehst hoffentlich, dass die Verwendung von passenden Namen und benamten Konstanten die Sache lesbarer und verständlicher macht, also am Besten direkt so angewöhnen.Und ich hoffe, der Rest ist auch halbwegs verständlich gewesen  [Edit]oben korrigiert für late binding, danke an d_b[/Edit] Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kons92 Mitglied Konstrukteur

 Beiträge: 91 Registriert: 07.12.2009 i920,6GB DDR3,FX3500 SW2011 SP1.0 Win7 64Bit
|
erstellt am: 19. Nov. 2010 14:47 <-- editieren / zitieren --> Unities abgeben:         
Vielen,Vielen Dank für das Makro Stefan. Leider bekomme ich aber in der Zeile Code:
boolstatus = Feature.ISetSuppression2(swUnSuppressFeature, swAllConfiguration, 0, "Standard")
den Fehler "Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft" (450)Woran liegt das vll. Verweise oder sowas. Vielen Dank im voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 19. Nov. 2010 15:53 <-- editieren / zitieren --> Unities abgeben:          Nur für kons92
Hallo kons92, hast du die Konstanten mit ins makro geschrieben oder die entsprechend Typelib eingebunden? Sonst lösen swUnSuppressFeature und swAllConfiguration ja zu 0 auf, was nicht passt. Auch hast du als letzten parameter "Standard" statt "" geschrieben, obwohl du ja keine spezifische, sondern alle Konfig bearbeiten möchtest, keine Ahnung, ob das einen Einfluss hat. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kons92 Mitglied Konstrukteur

 Beiträge: 91 Registriert: 07.12.2009 i920,6GB DDR3,FX3500 SW2011 SP1.0 Win7 64Bit
|
erstellt am: 19. Nov. 2010 15:58 <-- editieren / zitieren --> Unities abgeben:         
Danke für die Antwort Stefan, ich habe die Const .. im Makro mit drin. Zudem habe ich "Standard" nur versuchsweise hinzugefügt mit "" funktioniert es leider nicht. Wenn ich über z.B. swUnSuppressFeature mit der Mausfahre zeigt er = 1 an. Somit müsste er die Konstanten geladen haben. Vielen Dank für die Bemühungen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
d_b Mitglied vorhanden

 Beiträge: 88 Registriert: 15.03.2001 42
|
erstellt am: 19. Nov. 2010 16:59 <-- editieren / zitieren --> Unities abgeben:          Nur für kons92
|
kons92 Mitglied Konstrukteur

 Beiträge: 91 Registriert: 07.12.2009 i920,6GB DDR3,FX3500 SW2011 SP1.0 Win7 64Bit
|
erstellt am: 21. Nov. 2010 10:08 <-- editieren / zitieren --> Unities abgeben:         
|
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 22. Nov. 2010 09:17 <-- editieren / zitieren --> Unities abgeben:          Nur für kons92
Ups, das kommt davon, wenn ich hier direkt im Editor was ändere, danke an d_b für's finden. Ich hab's oben im Code sicherheitshalber auch noch geändert, man kann schon komplett auf late binding bleiben, dann muss die Zeile allerdings heißen
Code: boolstatus = Feature.SetSuppression2(swSuppressFeature, swAllConfiguration, "")
Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kons92 Mitglied Konstrukteur

 Beiträge: 91 Registriert: 07.12.2009 i920,6GB DDR3,FX3500 SW2011 SP1.0 Win7 64Bit
|
erstellt am: 22. Nov. 2010 17:45 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank Stefan für die Änderung. Ich habe noch eine Frage zu dem Code: Wie ist das mit dem Auswählen von mehreren Featuren. Ich hatte nämlich dann Probleme mit Eltern/Kind Beziehungen und dem Unterdrücken von Featuren. Dann wurden z.T. andere Feature nicht unterdrückt oder auch gar nicht unterdrückt. Geht das nur mit einem Feature oder auch mit mehreren? Code:
boolstatus = Part.Extension.SelectByID2("Platte@Test", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) boolstatus = Part.Extension.SelectByID2("Testteil@Test", "COMPONENT", 0, 0, 0, True, 0, Nothing, 0)
Wofür steht das False bzw. beim Zweiten das True ? Habe das leider in der API Hife nicht verstanden. Eigentlich müsste man doch so mehrere Features auswählen können oder? Unterdrückt er dann alle ausgewählten auf einmal oder hintereinander?Vielen Dank im voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mkkk Mitglied
 
 Beiträge: 105 Registriert: 04.03.2005
|
erstellt am: 23. Nov. 2010 08:13 <-- editieren / zitieren --> Unities abgeben:          Nur für kons92
Der sechste Parameter von SelectByID2() ist das Append-Flag. Es ist Vergleichbar mit dem Gedrückthalten der Strg-Taste beim Auswählen und ermöglicht somit eine Mehrfachauswahl ohne die vorherige Selektion wieder zu löschen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |