Jump to content

Макрос vba Solidworks ( использование параметров листового металла из материала)


Sergej0895

Recommended Posts

Sergej0895

Добрый день.

Помогите пожалуйста сделать макрос на Solidworks. Нужно, чтобы в дереве построения листовой детали, в параметрах листового тела - проставлялась галочка "Использовать параметры материала для листового металла" (для активной 3D модели). 

Автоматическая запись макроса не распознает данную операцию, а в справке по API данного параметра не нашел (по крайней мере с моим знанием английского). Нашел только как данную галочку поставить в свойствах для новых деталей, но это немного не то (прилагаю код ниже).

 

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSheetMetalUseMaterial, 0, True)
End Sub

Link to post
Share on other sites


UnPinned posts
Sturmann

Возможно вам нужно смотреть в сторону методов листового металла ( насколько я помню это  sheet metal feature) 

Link to post
Share on other sites
streamdown
21.01.2022 в 15:39, Sergej0895 сказал:

а в справке по API данного параметра не нашел

Он там есть.

https://help.solidworks.com/2022/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isweptflangefeaturedata~usematerialsheetmetalparameters.html

Link to post
Share on other sites
Maik812
21 час назад, Sturmann сказал:

Возможно вам нужно смотреть в сторону методов листового металла

Возможно ка кто добавить код в Geometrika или доп макрос, для постановки параметров листовой детали, масса, площадь, размеры основные.

Ну и главное что это листовая деталь. Вообще для анализа ка кто что это цилиндр, это лист, это профиль, это болванка? Возможно такое ? Анализ сделать?

Edited by Maik812
Link to post
Share on other sites
Sergej0895
2 часа назад, streamdown сказал:

Да, похоже это оно, но почему-то все равно не выходит. Команда не срабатывает, а попросту игнорируется... Видно что-то я все же делаю не так..

Link to post
Share on other sites
Sergej0895

Смысл вообще в том, чтобы при запуске просто прожималась галочка "Использовать параметры материала для листового металла", а там уже подвязана соответствующая таблица сгибов (для каждого материала своя таблица). Далее, сохранять развертку в формате dxf и все это дело организовать в пакетную обработку.

Link to post
Share on other sites
Snake 60

@Sergej0895 Покажите код макроса, может совместными усилиями и получиться что-то сделать.

  • Нравится 1
Link to post
Share on other sites
Sturmann
21.01.2022 в 15:39, Sergej0895 сказал:

Добрый день.

Помогите пожалуйста сделать макрос на Solidworks. Нужно, чтобы в дереве построения листовой детали, в параметрах листового тела - проставлялась галочка "Использовать параметры материала для листового металла" (для активной 3D модели). 

Автоматическая запись макроса не распознает данную операцию, а в справке по API данного параметра не нашел (по крайней мере с моим знанием английского). Нашел только как данную галочку поставить в свойствах для новых деталей, но это немного не то (прилагаю код ниже).

 

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSheetMetalUseMaterial, 0, True)
End Sub

Что то у меня такое смутное сомнение что этот код подучился в результате записи макроса. Запись иной раз очень много пропускает или записывает для "здесь и сейчас".

 

Link to post
Share on other sites
Sergej0895

Попробовал взять этот безумный код из примера справки API (с созданием листовой детали с нуля), добавил строчку применения материала, поставил значение "True" для параметра "UseMaterialSheetMetalParameters" (в конце кода), но увы, это тоже не приводит к нужному результату.

 

Dim swApp As SldWorks.SldWorks
Dim swFeat As SldWorks.Feature
Dim myFeature As SldWorks.Feature
Dim swFeatMgr As SldWorks.FeatureManager
Dim swFeatData As SldWorks.SweptFlangeFeatureData
Dim customBendAllowanceData As SldWorks.CustomBendAllowance
Dim swProfileSketch As SldWorks.Feature
Dim skSegment As SldWorks.SketchSegment
Dim Part As SldWorks.ModelDoc2
Dim swPart As PartDoc
Dim boolstatus As Boolean
Dim longstatus As Long

Option Explicit

Sub main()

    Set swApp = Application.SldWorks
      
    Dim swSheetWidth As Double
    swSheetWidth = 0
    Dim swSheetHeight As Double
    swSheetHeight = 0
    Set Part = swApp.NewDocument("C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\english\Tutorial\part.prtdot", 0, swSheetWidth, swSheetHeight)
   
    Set swPart = Part
    swApp.ActivateDoc2 "Part1", False, longstatus
    Set Part = swApp.ActiveDoc
   
    Part.SketchManager.InsertSketch True
    boolstatus = Part.Extension.SelectByID2("Front", "PLANE", -3.50345417518034E-02, 0.019677523162802, 5.11863136830445E-03, False, 0, Nothing, 0)
    Part.ClearSelection2 True
    boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSketchAddConstToRectEntity, swUserPreferenceOption_e.swDetailingNoOptionSpecified, False)
    boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSketchAddConstLineDiagonalType, swUserPreferenceOption_e.swDetailingNoOptionSpecified, True)
    Dim vSkLines As Variant
    vSkLines = Part.SketchManager.CreateCornerRectangle(-4.20403557341645E-02, 2.75066828701494E-02, 0, 4.75026757367474E-02, -2.20443628675665E-02, 0)
    Part.ClearSelection2 True

    Part.ShowNamedView2 "*Trimetric", 8
    Part.ViewZoomtofit2
   
    Set customBendAllowanceData = Part.FeatureManager.CreateCustomBendAllowance()
    customBendAllowanceData.KFactor = 0.5
   
    Set myFeature = Part.FeatureManager.InsertSheetMetalBaseFlange2(0.0007366, False, 0.0007366, 0.02, 0.01, False, 0, 0, 1, customBendAllowanceData, False, 0, 0.0001, 0.0001, 0.5, True, False, True, True)
   
    Part.ClearSelection2 True
    Part.SketchManager.InsertSketch True
    boolstatus = Part.Extension.SelectByID2("", "FACE", 4.41584745988735E-02, 2.75066828701256E-02, -2.52375262334681E-04, True, 0, Nothing, 0)
   
    Set skSegment = Part.SketchManager.CreateLine(0.047503, 0#, 0#, 0.047503, -0.015713, 0#)
    Part.ClearSelection2 True
    Part.SketchManager.InsertSketch True
   
    boolstatus = Part.Extension.SelectByID2("Sketch6", "SKETCH", 2.54585357375204E-02, -3.78791126417555E-03, -0.013876316631307, True, 0, Nothing, 0)
    boolstatus = Part.Extension.SelectByRay(4.72949686339916E-02, 1.33307046879168E-02, 2.07707102561017E-04, -0.499999999999997, -0.707106781186554, -0.499999999999995, 4.23592175091009E-04, 1, True, 0, 0)
    Part.ClearSelection2 True
   
    boolstatus = Part.Extension.SelectByID2("Sketch6", "SKETCH", 2.54585357375204E-02, -3.78791126417555E-03, -0.013876316631307, True, 0, Nothing, 0)
    Set swProfileSketch = Part.SelectionManager.GetSelectedObject6(1, -1)
    Part.ClearSelection2 True
   
    Dim swPathObj As Object
    Dim pathObjsArray(0) As Object
    boolstatus = Part.Extension.SelectByRay(4.72949686339916E-02, 1.33307046879168E-02, 2.07707102561017E-04, -0.499999999999997, -0.707106781186554, -0.499999999999995, 4.23592175091009E-04, 1, True, 0, 0)
    Set swPathObj = Part.SelectionManager.GetSelectedObject6(1, -1)
    Set pathObjsArray(0) = swPathObj
    Dim pathObjsVar As Variant
    pathObjsVar = pathObjsArray
    Part.ClearSelection2 True
  

Part.SetMaterialPropertyName2 "По умолчанию", "C:/ProgramData/SolidWorks/SOLIDWORKS 2021/Настроенный пользователем материал/Настроенный пользователем материал.sldmat", "Простая углеродистая сталь (Кор.)"
  
  

    Set swFeatMgr = Part.FeatureManager
  
    Set swFeatData = swFeatMgr.CreateDefinition(swFeatureNameID_e.swFmSweptFlange)
    swFeatData.EndOffset = 0
    swFeatData.FlangePosition = swSweptFlangePositionType_MaterialInside
    swFeatData.FlattenAlongPath = False
    swFeatData.OverrideDefaultSheetMetalParameters = False
    swFeatData.Path = pathObjsVar
    swFeatData.Profile = swProfileSketch
    swFeatData.ReverseDirection = False
    swFeatData.StartOffset = 0
    swFeatData.TrimSideBends = False
    swFeatData.UseDefaultBendAllowance = True
    swFeatData.UseDefaultBendRelief = True
    swFeatData.UseDefaultRadius = False
    swFeatData.UseGaugeTable = False
    swFeatData.UseMaterialSheetMetalParameters = True
    Set swFeat = swFeatMgr.CreateFeature(swFeatData)
    Part.ClearSelection2 True
    End Sub

Link to post
Share on other sites
Sturmann
9 часов назад, Sergej0895 сказал:

Попробовал взять этот безумный код из примера справки API (с созданием листовой детали с нуля), добавил строчку применения материала, поставил значение "True" для параметра "UseMaterialSheetMetalParameters" (в конце кода), но увы, это тоже не приводит к нужному результату.

 

Dim swApp As SldWorks.SldWorks
Dim swFeat As SldWorks.Feature
Dim myFeature As SldWorks.Feature
Dim swFeatMgr As SldWorks.FeatureManager
Dim swFeatData As SldWorks.SweptFlangeFeatureData
Dim customBendAllowanceData As SldWorks.CustomBendAllowance
Dim swProfileSketch As SldWorks.Feature
Dim skSegment As SldWorks.SketchSegment
Dim Part As SldWorks.ModelDoc2
Dim swPart As PartDoc
Dim boolstatus As Boolean
Dim longstatus As Long

Option Explicit

Sub main()

    Set swApp = Application.SldWorks
      
    Dim swSheetWidth As Double
    swSheetWidth = 0
    Dim swSheetHeight As Double
    swSheetHeight = 0
    Set Part = swApp.NewDocument("C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\english\Tutorial\part.prtdot", 0, swSheetWidth, swSheetHeight)
   
    Set swPart = Part
    swApp.ActivateDoc2 "Part1", False, longstatus
    Set Part = swApp.ActiveDoc
   
    Part.SketchManager.InsertSketch True
    boolstatus = Part.Extension.SelectByID2("Front", "PLANE", -3.50345417518034E-02, 0.019677523162802, 5.11863136830445E-03, False, 0, Nothing, 0)
    Part.ClearSelection2 True
    boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSketchAddConstToRectEntity, swUserPreferenceOption_e.swDetailingNoOptionSpecified, False)
    boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSketchAddConstLineDiagonalType, swUserPreferenceOption_e.swDetailingNoOptionSpecified, True)
    Dim vSkLines As Variant
    vSkLines = Part.SketchManager.CreateCornerRectangle(-4.20403557341645E-02, 2.75066828701494E-02, 0, 4.75026757367474E-02, -2.20443628675665E-02, 0)
    Part.ClearSelection2 True

    Part.ShowNamedView2 "*Trimetric", 8
    Part.ViewZoomtofit2
   
    Set customBendAllowanceData = Part.FeatureManager.CreateCustomBendAllowance()
    customBendAllowanceData.KFactor = 0.5
   
    Set myFeature = Part.FeatureManager.InsertSheetMetalBaseFlange2(0.0007366, False, 0.0007366, 0.02, 0.01, False, 0, 0, 1, customBendAllowanceData, False, 0, 0.0001, 0.0001, 0.5, True, False, True, True)
   
    Part.ClearSelection2 True
    Part.SketchManager.InsertSketch True
    boolstatus = Part.Extension.SelectByID2("", "FACE", 4.41584745988735E-02, 2.75066828701256E-02, -2.52375262334681E-04, True, 0, Nothing, 0)
   
    Set skSegment = Part.SketchManager.CreateLine(0.047503, 0#, 0#, 0.047503, -0.015713, 0#)
    Part.ClearSelection2 True
    Part.SketchManager.InsertSketch True
   
    boolstatus = Part.Extension.SelectByID2("Sketch6", "SKETCH", 2.54585357375204E-02, -3.78791126417555E-03, -0.013876316631307, True, 0, Nothing, 0)
    boolstatus = Part.Extension.SelectByRay(4.72949686339916E-02, 1.33307046879168E-02, 2.07707102561017E-04, -0.499999999999997, -0.707106781186554, -0.499999999999995, 4.23592175091009E-04, 1, True, 0, 0)
    Part.ClearSelection2 True
   
    boolstatus = Part.Extension.SelectByID2("Sketch6", "SKETCH", 2.54585357375204E-02, -3.78791126417555E-03, -0.013876316631307, True, 0, Nothing, 0)
    Set swProfileSketch = Part.SelectionManager.GetSelectedObject6(1, -1)
    Part.ClearSelection2 True
   
    Dim swPathObj As Object
    Dim pathObjsArray(0) As Object
    boolstatus = Part.Extension.SelectByRay(4.72949686339916E-02, 1.33307046879168E-02, 2.07707102561017E-04, -0.499999999999997, -0.707106781186554, -0.499999999999995, 4.23592175091009E-04, 1, True, 0, 0)
    Set swPathObj = Part.SelectionManager.GetSelectedObject6(1, -1)
    Set pathObjsArray(0) = swPathObj
    Dim pathObjsVar As Variant
    pathObjsVar = pathObjsArray
    Part.ClearSelection2 True
  

Part.SetMaterialPropertyName2 "По умолчанию", "C:/ProgramData/SolidWorks/SOLIDWORKS 2021/Настроенный пользователем материал/Настроенный пользователем материал.sldmat", "Простая углеродистая сталь (Кор.)"
  
  

    Set swFeatMgr = Part.FeatureManager
  
    Set swFeatData = swFeatMgr.CreateDefinition(swFeatureNameID_e.swFmSweptFlange)
    swFeatData.EndOffset = 0
    swFeatData.FlangePosition = swSweptFlangePositionType_MaterialInside
    swFeatData.FlattenAlongPath = False
    swFeatData.OverrideDefaultSheetMetalParameters = False
    swFeatData.Path = pathObjsVar
    swFeatData.Profile = swProfileSketch
    swFeatData.ReverseDirection = False
    swFeatData.StartOffset = 0
    swFeatData.TrimSideBends = False
    swFeatData.UseDefaultBendAllowance = True
    swFeatData.UseDefaultBendRelief = True
    swFeatData.UseDefaultRadius = False
    swFeatData.UseGaugeTable = False
    swFeatData.UseMaterialSheetMetalParameters = True
    Set swFeat = swFeatMgr.CreateFeature(swFeatData)
    Part.ClearSelection2 True
    End Sub

так много кода и так мало комментариев(((((

предлагаю вам не сваливать все в одну кучу , а разбить на несколько этапов:

1. создание детали из шаблона

2. управление параметрами этой детали

3. готово.

 

Либо чтобы не тратить зря время- просто забейте в шаблоне детали все необходимые параметры и будет вам счастье.

Link to post
Share on other sites
Sergej0895

Попробовал немного по другому. Сначала сделал выбор материала, а затем чтобы поставилась галочка "Использовать параметры материала для листового металла" с выбором таблицы сгибов (подвязана в настройках материала). Увы из всего этого происходит только выбор материала...

В принципе, временно подошел бы вариант, в котором можно просто подгрузить таблицу сгибов, но это также не работает (только при создании новой детали, а не для изменения параметров текущей модели).

 

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

'Выбор материала
Part.SetMaterialPropertyName2 "По умолчанию", "C:/ProgramData/SolidWorks/SOLIDWORKS 2021/Настроенный пользователем материал/Настроенный пользователем материал.sldmat", "Простая углеродистая сталь (Кор.)"

'Ставим галочку "Использовать параметры материала для листового металла"
Part.ClearSelection2 True
boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSketchAddConstToRectEntity, swUserPreferenceOption_e.swDetailingNoOptionSpecified, True)
boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSketchAddConstLineDiagonalType, swUserPreferenceOption_e.swDetailingNoOptionSpecified, True)

'Информация о таблице сгибов
Dim customBendAllowanceData As Object
Set customBendAllowanceData = Part.FeatureManager.CreateCustomBendAllowance()
customBendAllowanceData.BendTableFile = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\russian\Sheetmetal Bend Tables\BD_Table_бф.xlsx"
Dim myFeature As Object
Set myFeature = Part.FeatureManager.InsertSheetMetalBaseFlange2(0.001, False, 0.001, 0.02, 0.01, False, 0, 0, 1, customBendAllowanceData, True, 0, 0.0001, 0.0001, 0.5, True, False, True, True)
End Sub
 

Link to post
Share on other sites
Sturmann
6 часов назад, Sergej0895 сказал:

Попробовал немного по другому. Сначала сделал выбор материала, а затем чтобы поставилась галочка "Использовать параметры материала для листового металла" с выбором таблицы сгибов (подвязана в настройках материала). Увы из всего этого происходит только выбор материала...

В принципе, временно подошел бы вариант, в котором можно просто подгрузить таблицу сгибов, но это также не работает (только при создании новой детали, а не для изменения параметров текущей модели).

 

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

'Выбор материала
Part.SetMaterialPropertyName2 "По умолчанию", "C:/ProgramData/SolidWorks/SOLIDWORKS 2021/Настроенный пользователем материал/Настроенный пользователем материал.sldmat", "Простая углеродистая сталь (Кор.)"

'Ставим галочку "Использовать параметры материала для листового металла"
Part.ClearSelection2 True
boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSketchAddConstToRectEntity, swUserPreferenceOption_e.swDetailingNoOptionSpecified, True)
boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSketchAddConstLineDiagonalType, swUserPreferenceOption_e.swDetailingNoOptionSpecified, True)

'Информация о таблице сгибов
Dim customBendAllowanceData As Object
Set customBendAllowanceData = Part.FeatureManager.CreateCustomBendAllowance()
customBendAllowanceData.BendTableFile = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\russian\Sheetmetal Bend Tables\BD_Table_бф.xlsx"
Dim myFeature As Object
Set myFeature = Part.FeatureManager.InsertSheetMetalBaseFlange2(0.001, False, 0.001, 0.02, 0.01, False, 0, 0, 1, customBendAllowanceData, True, 0, 0.0001, 0.0001, 0.5, True, False, True, True)
End Sub
 

Здравствуйте. Можно вопрос? 

Вы этот код :

написали сами, 

взяли из справки, 

записали рекордером и немного отформатировали? 

Link to post
Share on other sites
Snake 60
1 минуту назад, Sturmann сказал:

записали рекордером ...

Судя по первым двум строкам кода - то да

Link to post
Share on other sites
Sturmann
1 минуту назад, Snake 60 сказал:

Судя по первым двум строкам кода - то да

Ну вот верят люди что открыв один документ в случайном виде и сделав с ним какие либо действия и щаписав их рекордером солид будет повторять эти действия на всех сборках! 

Не будет такого. 

Тут нужно разбирать каждую строку- что делает почему именно так. И проверять на сотнях документов с разных компов и от разных авторов. 

Link to post
Share on other sites
Sergej0895
11 часов назад, Sturmann сказал:

Здравствуйте. Можно вопрос? 

Вы этот код :

написали сами, 

взяли из справки, 

записали рекордером и немного отформатировали? 

Данный код да, отформатированный после записи. Пробовал уже по разному и вручную и с записью и объединял оба кода, но так как уровня знаний не хватает в данной области - мог попросту упустить какую-нибудь мелочь.

Link to post
Share on other sites
Sturmann
2 часа назад, Sergej0895 сказал:

Данный код да, отформатированный после записи. Пробовал уже по разному и вручную и с записью и объединял оба кода, но так как уровня знаний не хватает в данной области - мог попросту упустить какую-нибудь мелочь.

Ну так это не работает.

Он много чего не записывает или записывает "здесь и сейчас" только для данных событий.

Для другой сборки он может и не сработать.

Тут нужны знания по программированию

Link to post
Share on other sites
Snake 60
22.01.2022 в 19:02, Sergej0895 сказал:

Смысл вообще в том, чтобы при запуске просто прожималась галочка "Использовать параметры материала для листового металла"

Вот эту галку надо активировать?

изображение.png

Link to post
Share on other sites
Sergej0895

%E2%80%AAC%3A%5CUsers%5CANONIM%5CDesktop%5C1.jpgPlLz4Не совсем, нужная галочка находится чуть выше. Она так и называется "Использовать параметры материала для листового металла".

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.



×
×
  • Create New...