| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
|
Autor
|
Thema: API: Teil in BG von reduziert auf vollständig (2567 mal gelesen)
|
THSEFA Mitglied Konstrukteur/CAD-Admin
   
 Beiträge: 1142 Registriert: 27.11.2002 SWX 2020 SP5.0 Premium Windows 10 Pro 64Bit Citrix VM Intel(R) XEON(R) Gold 6146 CPU @ 3.20GHz 24 GB Ram<P>Windows 10 Pro 64Bit
|
erstellt am: 12. Okt. 2009 10:55 <-- editieren / zitieren --> Unities abgeben:         
Hallo Allerseits, ich bin gerade dabei, mir ein Makro hier aus dem Brett zu optimieren, mit welchem ich mir die Dateieigenschaften eines Teils aus einer BG anzeigen lassen kann. Nun laden wir aber haupsächlich unsere BG´s reduziert. Aus diesem Grund schmiert mir das Makro immer ab. Abhilfe verspricht mir ja dieser Beitrag hier. Nur wenn ich das richtig verstanden habe, werden mit dem Befehl AssemblyDoc.ResolveAllLightWeightComponents alle Teile vollständig geladen. Das möchte ich nicht! Gibt es eine Möglichkeit, das einzelne, schon markierte Teil vollständig zu laden? Schon mal besten Dank für´s lesen! ------------------ Viele Grüße, THSEFA Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Baumjäger Mitglied CAD/PDM Administrator
 
 Beiträge: 339 Registriert: 21.06.2006 SW2017 - S5.0 AutoCAD Mechanical 2018 Win10 Intel Xeon E3-1240 V2 3,4GHz 16GB RAM NVIDIA Quadro 4000
|
erstellt am: 12. Okt. 2009 11:03 <-- editieren / zitieren --> Unities abgeben:          Nur für THSEFA
|
Thomas5 Mitglied Konstrukteur, SWX-Admin
 
 Beiträge: 420 Registriert: 14.07.2003 SWX2013
|
erstellt am: 12. Okt. 2009 12:04 <-- editieren / zitieren --> Unities abgeben:          Nur für THSEFA
Hallo THSEFA, bei der einzelnen Komponente kannst Du mit "swChildComp.SetSuppression" den Status ändern, wobei swComponentSuppressed = 0 ' Fully suppressed - nothing is loaded swComponentLightweight = 1 ' Featherweight - only graphics data is loaded swComponentFullyResolved = 2 ' Fully resolved - model is completly loaded sind. Viele Grüße Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd Knab Mitglied
 
 Beiträge: 373 Registriert: 16.01.2001 SWX 2020 SP5.0
|
erstellt am: 12. Okt. 2009 13:47 <-- editieren / zitieren --> Unities abgeben:          Nur für THSEFA
Hi, ich würde die Dateieigenschaften über den Dokumentmanager holen/ändern. Zuvor die referenzierten Dateien aus der Baugruppe holen mit GetDependencies2. Wichtig beim Schreiben der Dokumenteigenschaften muss auf die Datei Schreibrechte bestehen. Hier mal ein Bsp., bei dem ich Dateieigenschaften geschrieben habe: Sub main() Const sLicenseKey As String = "xxx" ' Lizenznummer eintragen Dim swClassFact As SwDMClassFactory Dim swDocMgr As SwDMApplication Dim swDoc As SwDMDocument Dim swCfgMgr As SwDMConfigurationMgr Dim Params As Variant Dim swCfg As SwDMConfiguration Dim nDocType As Long Dim nRetVal As Long Dim i As Long Dim bRet As Boolean Dim Dateiname As String Dim Konfigname As String Set swClassFact = CreateObject("SwDocumentMgr.SwDMClassFactory") Set swDocMgr = swClassFact.GetApplication(sLicenseKey) If InStr(UCase(Dateiname), "SLDPRT") Then nDocType = swDmDocumentPart ElseIf InStr(UCase(Dateiname), "SLDASM") Then nDocType = swDmDocumentAssembly ElseIf InStr(UCase(Dateiname), "SLDDRW") Then nDocType = swDmDocumentDrawing Else Exit Do End If Set swDoc = swDocMgr.GetDocument(Dateiname, nDocType, False, nRetVal) If nRetVal = 0 Then Set swCfgMgr = swDoc.ConfigurationManager If (Not (swCfgMgr Is Nothing)) Then Set swCfg = swCfgMgr.GetConfigurationByName(Konfigname) swCfg.SetCustomProperty "Materialnummer", "XXX" swDoc.Save swDoc.CloseDoc End If End If End Sub Gruß Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
THSEFA Mitglied Konstrukteur/CAD-Admin
   
 Beiträge: 1142 Registriert: 27.11.2002 SWX 2020 SP5.0 Premium Windows 10 Pro 64Bit Citrix VM Intel(R) XEON(R) Gold 6146 CPU @ 3.20GHz 24 GB Ram<P>Windows 10 Pro 64Bit
|
erstellt am: 12. Okt. 2009 15:06 <-- editieren / zitieren --> Unities abgeben:         
Habs mal so versucht, alleine für sich klappt es schon: Code:
Option Explicit Public Enum swComponentSuppressionState_e swComponentSuppressed = 0 ' Fully suppressed - nothing is loaded swComponentLightweight = 1 ' Featherweight - only graphics data is loaded swComponentFullyResolved = 2 ' Fully resolved - model is completely loaded End Enum Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swAssy As SldWorks.AssemblyDoc Dim swSelMgr As SldWorks.SelectionMgr Dim swComp As SldWorks.Component2 Dim nSelCount As Long Dim i As Long Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swAssy = swModel Set swSelMgr = swModel.SelectionManager For i = 1 To nSelCount + 1 Set swComp = swSelMgr.GetSelectedObjectsComponent(i) Next i swAssy.ResolveAllLightweight End Sub
Frage an die Profis: Ist das soweit ok oder völliger Blödsinn? ------------------ Viele Grüße, THSEFA Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
THSEFA Mitglied Konstrukteur/CAD-Admin
   
 Beiträge: 1142 Registriert: 27.11.2002 SWX 2020 SP5.0 Premium Windows 10 Pro 64Bit Citrix VM Intel(R) XEON(R) Gold 6146 CPU @ 3.20GHz 24 GB Ram<P>Windows 10 Pro 64Bit
|
erstellt am: 12. Okt. 2009 15:30 <-- editieren / zitieren --> Unities abgeben:         
Bin dabei, den Code in das andere Makro einzubauen. Dabei stellt sich mir folgende Frage: Wie kann ich erreichen, dass zum Schluss das Teil selektiert bleibt? ------------------ Viele Grüße, THSEFA Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas5 Mitglied Konstrukteur, SWX-Admin
 
 Beiträge: 420 Registriert: 14.07.2003 SWX2013
|
erstellt am: 12. Okt. 2009 16:44 <-- editieren / zitieren --> Unities abgeben:          Nur für THSEFA
Hallo THSEFA, in deiner For-Schleife gehst Du ja schon an die Komponente ran. Wenn du die dann geladen hast z.B. mit swComp.SetSuppression(swComponentFullyResolved), kannst Du ja deine Eigenschaften gleich in der For-schleife vertüteln ohne die Komponete noch mal zu selektieren. Ansonsten kannst du die Komponente mit z.B. SelectByID oder Select3 neu selektieren. Ja, da gibt es tolle Möglichkeiten..., je nachdem, was zum Schluß ´rauskommen soll. Viele Grüße! Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
THSEFA Mitglied Konstrukteur/CAD-Admin
   
 Beiträge: 1142 Registriert: 27.11.2002 SWX 2020 SP5.0 Premium Windows 10 Pro 64Bit Citrix VM Intel(R) XEON(R) Gold 6146 CPU @ 3.20GHz 24 GB Ram<P>Windows 10 Pro 64Bit
|
erstellt am: 13. Okt. 2009 13:46 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von Thomas5: Hallo THSEFA, in deiner For-Schleife gehst Du ja schon an die Komponente ran... ...kannst Du ja deine Eigenschaften gleich in der For-schleife vertüteln ohne die Komponete noch mal zu selektieren.
Hmm, für meine bescheidenen Kentnisse ist es einfacher, das bisschen neuen Code in das rieeesen Makro einzubinden als umgekehrt. Darum würde lieber ich gern den anderen Weg gehen. ;) Zitat: Original erstellt von Thomas5: Ansonsten kannst du die Komponente mit z.B. SelectByID oder Select3 neu selektieren.
Oje! Habe seit heute früh probiert, beide Möglichkeiten irgendwie hinzubasteln. Bin aber bis jetzt nicht weitergekommen. Am aussichtsreichsten war noch der Befehl SelectByName Method (IModelDoc2). Nur ging dann immer irgendein anderes Einzelteil auf... Ich muss dazu sagen, dass ich eigentlich keine Ahnung von dem habe, was ich hier machen will. Das ich auch keinen neben mir sitzen habe, der mir wenigstens die wichtigsten Grundbegriffe erklärt, ist auch nicht gerade das gelbe vom Ei.  Sei´s drum: Ich bekomme es nicht hin, dass ich das gleiche Teil wie am Anfang markiert habe. Wer kann und möchte mir etwas detailierter unter die Arme greifen? ------------------ Viele Grüße, THSEFA Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 13. Okt. 2009 14:24 <-- editieren / zitieren --> Unities abgeben:          Nur für THSEFA
Hallo THSEFA, ich hoffe das ich dein Problem richtig verstanden habe: Du möchtest alle selektierten Komponenten vollständig landen, um darauf die Dokumenteigenschaften dieser Komponenten zu ermitteln. Das du dies nicht in einer Schleife machen möchtest, sollen die zuvor selektierten Komponenten nach dem Laden wieder selektiert sein. Wenn das so stimmt, müsste dieser Code klappen:
Code:
Option ExplicitPublic Enum swComponentSuppressionState_e swComponentSuppressed = 0 'Fully suppressed - nothing is loaded swComponentLightweight = 1 'Featherweight - only graphics data is loaded swComponentFullyResolved = 2 'Fully resolved - model is completely loaded End Enum Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swAssy As SldWorks.AssemblyDoc Dim swSelMgr As SldWorks.SelectionMgr Dim swComp As SldWorks.Component2 Dim nSelCount As Long Dim nSelComp As Long Dim i As Long 'Array für alle selektierten Komponenten Dim swComponents() As SldWorks.Component2 Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swAssy = swModel Set swSelMgr = swModel.SelectionManager 'Zähler für die Komponenten nSelComp = -1 'Alle selektierten Elemente berücksichtigen For i = 1 To swSelMgr.GetSelectedObjectCount2(-1) + 1 'Gibt es zur Selektion eine Komponente? Set swComp = swSelMgr.GetSelectedObjectsComponent(i) If Not swComp Is Nothing Then 'Komponente im Array zwischen speichern nSelComp = nSelComp + 1 ReDim Preserve swComponents(0 To nSelComp) Set swComponents(nSelComp) = swComp End If Next i 'Komponente vollständig laden For i = 0 To nSelComp Set swComp = swComponents(i) swComp.SetSuppression (swComponentFullyResolved) Next i 'Komponenten wieder selektieren For i = 0 To nSelComp Set swComp = swComponents(i) swComp.Select3 True, Nothing Next i End Sub
In vb.net hätte ich dieses Problem in der hälfte der Zeit und mit der Hälte des Codes gelöst. Aber es war mal wieder schön zurück zu den Wurzeln zu gehen :-)
------------------ Mfg Daniel www.MySldWorks.de - SolidWorks API Snippets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
THSEFA Mitglied Konstrukteur/CAD-Admin
   
 Beiträge: 1142 Registriert: 27.11.2002 SWX 2020 SP5.0 Premium Windows 10 Pro 64Bit Citrix VM Intel(R) XEON(R) Gold 6146 CPU @ 3.20GHz 24 GB Ram<P>Windows 10 Pro 64Bit
|
erstellt am: 13. Okt. 2009 15:15 <-- editieren / zitieren --> Unities abgeben:         
Code eingebaut und es funktioniert prächtig!!! @Daniel und den anderen fleißigen Helfern Habt alle recht herzlichen Dank! Mit eurer Hilfe habt ihr mir wieder einen Schub Motivation gegeben, mich mit Makros zu beschäftigen. Vielleicht kann ich ja meinem Chef (nachdem ich ihm mal diese tollen Möglichkeiten mit Makros gezeigt habe! ) eine Grundlagenschulung aus dem Kreuz leiern. Also: Nochmals vielen Dank an Alle! ------------------ Viele Grüße, THSEFA Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |