Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Teile einfrieren per Makro

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
  
PLM TechnologieForum Bamberg
Autor Thema:  Teile einfrieren per Makro (1637 mal gelesen)
ckoring
Mitglied
Ingenieur


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

Beiträge: 229
Registriert: 09.06.2009

Fujitsu CELSIUS M740
Intel Xeon E5-1620v4
32 GB RAM
Nvidia Quadro P4000
Windows 10 Pro
SolidWorks 2017 SP4.1
DBWorks R16 SP1.7

erstellt am: 11. Jan. 2018 08:42    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

Hi!

Hab für interne Test nach einer Möglichkeit gesucht per API die Einfrieren-Leiste für alle Teile einer Baugruppe zu verschieben. Bin auf diesen Thread im offiziellen Solidworks-Forum gestoßen https://forum.solidworks.com/message/482618. Möchte euch meine "Erkenntnisse" und Ergebnisse aber nicht vorenthalten. Wie immer ohne Gewähr für physische und psychische Soft- und Hardwareschäden! 

Code:

' Rebuild and Freeze Part in Assy (SW2014).swp ---------------------------------02/04/15
' Description: Macro to rebuild all parts and Freeze in active assembly.
' Precondition: An active assembly containing part Files.
' Postcondition: All part files in the active assembly will be force rebuild and freezed.
' Please back up your data before use and USE AT OWN RISK
'
' This macro is provided as is.  No claims, support, refund, safety net, or
' warranties are expressed or implied.  By using this macro and/or its code in
' any way whatsoever, the user and any entities which the user represents,
' agree to hold the authors free of any and all liability.  Free distribution
' and use of this code in other free works is welcome.  If any portion of
' this code is used in other works, credit to the authors must be placed in
' that work within a user viewable location (e.g., macro header).  All other
' forms of distribution (i.e., not free, fee for delivery, etc) are prohibited
' without the expressed written consent by the authors.  Use at your own risk!
' ------------------------------------------------------------------------------
' Written by: Deepak Gupta (http://gupta9665.wordpress.com/)
' -----------------------------------------------------------------------------
' https://forum.solidworks.com/message/482618#comment-482618
' modified by CK 11.01.2018

Option Explicit

    ' set to 1 moves the freeze bar to the end, set to 4 moves it to the top (unfreeze)
    Const FREEZE As Integer = 4

    Dim swApp                      As SldWorks.SldWorks
    Dim swModel                    As SldWorks.ModelDoc2
    Dim swAssy                      As SldWorks.AssemblyDoc
    Dim swConf                      As SldWorks.Configuration
    Dim swRootComp                  As SldWorks.Component2

Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)

    Dim swChildComp                As SldWorks.Component2
    Dim swPart                      As SldWorks.ModelDoc2
    Dim swChildModel                As SldWorks.ModelDoc2
    Dim swAssy                      As SldWorks.AssemblyDoc
    Dim swCompConfig                As SldWorks.Configuration
    Dim vChildComp                  As Variant
    Dim sPadStr                    As String
    Dim i                          As Long
    Dim Errors                      As Long

    For i = 0 To nLevel - 1
        sPadStr = sPadStr + "  "
    Next i
   
    ' resolve all LightWeight components
    Set swChildModel = swComp.GetModelDoc
    Set swAssy = swModel
    swAssy.ResolveAllLightWeightComponents (True)
    Set swChildModel = Nothing

    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        Set swChildModel = swChildComp.GetModelDoc
        If Not swChildModel Is Nothing Then
            If swChildModel.GetType = 2 Then
                Debug.Print nLevel & " - " & swChildComp.GetPathName
                TraverseComponent swChildComp, nLevel + 1
            Else
                Set swPart = swApp.ActivateDoc3(swChildComp.GetPathName, False, swDontRebuildActiveDoc, Errors)
                If swPart.IsOpenedReadOnly = False Then
                    Debug.Print nLevel & " - " & swPart.GetPathName
                    'swPart.FeatureManager.EditFreeze 4, "", True ' Freeze bar to Top
                    'swPart.ForceRebuild3 (False)
                    swPart.FeatureManager.EditFreeze FREEZE, "", True ' Freeze bar to End if FREEZE is set to 1
                    swModel.ShowNamedView2 "*Isometric", -1
                    swModel.ViewZoomtofit2
                    swPart.Save
                Else
                    Debug.Print nLevel & " - " & swChildComp.GetPathName & " (READONLY)"
                End If
                swApp.CloseDoc swPart.GetTitle
            End If
        Else
            Debug.Print nLevel & " - " & swChildComp.GetPathName & " (skipped)"
        End If
    Next i

End Sub

Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swConf = swModel.GetActiveConfiguration
    Set swRootComp = swConf.GetRootComponent3(True)
   
    Debug.Print "---START---"
    TraverseComponent swRootComp, 1
    Debug.Print "---END---"
   
    'swModel.ForceRebuild3 (False)
    'swModel.ShowNamedView2 "*Isometric", -1
    'swModel.ViewZoomtofit2
    'swModel.Save

End Sub


mfg Christian

[Diese Nachricht wurde von ckoring am 11. Jan. 2018 editiert.]

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

JoergKirchner
Mitglied
Dipl.-Ing.


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

Beiträge: 174
Registriert: 18.06.2001

SWX2022 Edu - Dell Precision M4800

erstellt am: 16. Jan. 2018 15:23    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 ckoring 10 Unities + Antwort hilfreich


freeze.zip

 
Hallo, super habe nicht gewust das ich sowas brauche ... Aber jetzt habe ich das Makro und finde es eigentlich sehr praktisch. Habe noch eine Abfrage rein ob es eine Baugruppe ist. Man muss im Makro selbst in der Const FREEZE Zeile eintragen ob man Freeze oder unfreeze machen will. Angehängt das .swp file für faule.
Dolles Ding von mir gibts mal ein paar Punkte.
Getestet auf SWX 2017 SP5.0 !

------------------
http://www.braun.com

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3189
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 17. Jan. 2018 09: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 Nur für ckoring 10 Unities + Antwort hilfreich

Sehr super,

hatte das auch schon mal angefangen,
mit Bearbeiten im Kontext hab ich den Aufruf aber nicht hinbekommen wie er sein soll.
(zumindest in 2016 - unfreeze ging, freeze komplett nicht, nur wenn man die genaue Position kennt, ging es ...)
activatedoc und closedoc ist dann wohl die funktionierende Lösung ...  

Werde das Projekt wieder aufnehmen.

Edith
Die Richtung habe ich wechselweise gesteuert mit

Code:

Set swFreezePos = swFeatMgr.GetFreezeLocation
If swFreezePos Is Nothing Then
    freezedirection = swMoveFreezeBarToEnd
Else
    freezedirection = swMoveFreezeBarToTop
End If

dann will ich noch "alreadytouched" integrieren (aber ich glaub in "Referenzen sperren" ist das falsch implementiert)

Gruß, Christian

[Diese Nachricht wurde von Christian_W am 17. Jan. 2018 editiert.]

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