Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Teil in BG von reduziert auf vollständig

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von THSEFA an!   Senden Sie eine Private Message an THSEFA  Schreiben Sie einen Gästebucheintrag für THSEFA

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Baumjäger an!   Senden Sie eine Private Message an Baumjäger  Schreiben Sie einen Gästebucheintrag für Baumjäger

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für THSEFA 10 Unities + Antwort hilfreich

Hi,
Vielleicht hilft dir das: "AssemblyDoc::MakeLightWeight"
oder das: "Make Assembly Components Lightweight Example (VB)"
weiter. (Einfach in die SWXSolidWorks-API-Hilfe-Suche einfügen).

Gruß
Andy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thomas5
Mitglied
Konstrukteur, SWX-Admin


Sehen Sie sich das Profil von Thomas5 an!   Senden Sie eine Private Message an Thomas5  Schreiben Sie einen Gästebucheintrag für Thomas5

Beiträge: 420
Registriert: 14.07.2003

SWX2013

erstellt am: 12. Okt. 2009 12:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für THSEFA 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Bernd Knab an!   Senden Sie eine Private Message an Bernd Knab  Schreiben Sie einen Gästebucheintrag für Bernd Knab

Beiträge: 373
Registriert: 16.01.2001

SWX 2020 SP5.0

erstellt am: 12. Okt. 2009 13:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für THSEFA 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von THSEFA an!   Senden Sie eine Private Message an THSEFA  Schreiben Sie einen Gästebucheintrag für THSEFA

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von THSEFA an!   Senden Sie eine Private Message an THSEFA  Schreiben Sie einen Gästebucheintrag für THSEFA

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Thomas5 an!   Senden Sie eine Private Message an Thomas5  Schreiben Sie einen Gästebucheintrag für Thomas5

Beiträge: 420
Registriert: 14.07.2003

SWX2013

erstellt am: 12. Okt. 2009 16:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für THSEFA 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von THSEFA an!   Senden Sie eine Private Message an THSEFA  Schreiben Sie einen Gästebucheintrag für THSEFA

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von tbd an!   Senden Sie eine Private Message an tbd  Schreiben Sie einen Gästebucheintrag für tbd

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für THSEFA 10 Unities + Antwort hilfreich

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 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 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


Sehen Sie sich das Profil von THSEFA an!   Senden Sie eine Private Message an THSEFA  Schreiben Sie einen Gästebucheintrag für THSEFA

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz