Перейти к публикации

Сделай свою работу в Solidworks эффективнее


Рекомендованные сообщения

9 часов назад, Snake 60 сказал:

Попробуйте открыть STP в компасе, а из компаса сохранить в формат X_T (это формат ядра парасолид, более близкий к Солиду. если можно так сказать) и уже X_T открывайте в SolidWorks. О результатах отпишитесь, помогло или нет :) меня в некоторых случаях такой подход выручал.

Пробовала, Так быстрее конечно. Но хотелось бы step открывать, так как он сохраняет название деталей, сборок, цвета, те всё в первозданном виде, а xt что то всегда теряет

Ссылка на сообщение
Поделиться на других сайтах


9 часов назад, Kir95 сказал:

Пробуй новую версию - на 21 солиде всё работает)

У меня 16 - выскакивает окошко

Скрытый текст

изображение_2020-12-09_083504.png

Голубым цветом подсвечивает строку "MyMassProp As SldWorks.MassProperty2"

После нажатия "ОК" ничего не происходит.

9 часов назад, Kir95 сказал:

Не знал, что массу можно вручную менять

Век живи - век учись! ))

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, malvi.dp сказал:

Голубым цветом подсвечивает строку "MyMassProp As SldWorks.MassProperty2"

В вашей версии надо использовать SldWorks.MassProperty (без двойки).

Для начала можно попробовать убрать 2, но скорее всего немного потребуется подправить код касающейся данной процедуры/функции.

Пример для MassProperty:

http://help.solidworks.com/2021/english/api/sldworksapi/Get_Mass_Properties_of_Multibody_Assembly_Component_Example_VB.htm

http://help.solidworks.com/2021/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IMassProperty.html

Пример для MassProperty2

http://help.solidworks.com/2021/english/api/sldworksapi/Get_Mass_Properties_using_MassProperty_Object_Example_VB.htm

http://help.solidworks.com/2021/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IMassProperty2.html

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах
46 минут назад, Kelny сказал:

 скорее всего немного потребуется подправить код касающейся данной процедуры/функции.

Вы правы, просто убрать 2 не помогло.

Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, malvi.dp сказал:

Вы правы, просто убрать 2 не помогло.

Дальше немного подправить, некоторые строки закомментить (одинарная кавычка в начале строки) или удалить, например:

Цитата

...

val = InputBox("Ввести значение массы, кг", "Окно ввода значения", "100")

...

    Set MyMassProp = swModel.Extension.CreateMassProperty
    'Set OvProp = MyMassProp.GetOverrideOptions
    'OvProp.OverrideMass = True
    'OvProp.SetOverrideMassValue (val)
    
'        Debug.Print "Mass properties before override"
'    massval = MyMassProp.Mass
'    Debug.Print "Mass: " & massval

    '    MyMassProp.SetOverrideOptions OvProp, swThisConfiguration, Empty
    Dim vCofG                   As Variant
    vCofG = MyMassProp.CenterOfMass
    Debug.Print MyMassProp.SetAssignedMassProp(val, vCofG(0), vCofG(1), vCofG(2), swAllConfiguration, "")

    'MyMassProp.Recalculate

'    Debug.Print ""
'    Debug.Print "Mass properties after override"
'    massval = MyMassProp.Mass
'    Debug.Print "Mass: " & massval
...

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах

@Kelny , спасибо за помощь!

После замены SldWorks.MassProperty2 на SldWorks.MassProperty выскакивает тоже окошко но на следующей строке "Dim OvProp As SldWorks.MassPropertyOverrideOptions" 

его тоже нужно чем-то заменить.

 

Ссылка на сообщение
Поделиться на других сайтах
18 минут назад, malvi.dp сказал:

выскакивает тоже окошко но на следующей строке "Dim OvProp As SldWorks.MassPropertyOverrideOptions" 

его тоже нужно чем-то заменить.

 

42 минуты назад, Kelny сказал:

строки закомментить (одинарная кавычка в начале строки) или удалить

 

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах

@Kelny , если закомментировать, то отрабатывает без ошибок.

Но, вставленный файл не сопряжен (не зафиксирован) и масса не соответствует введенной в окошке (она остается изначальной).

Осталось совсем малость ))

Еще заметил, если чсло в окошке вводить в английской раскладке, то выскакивает окно

Скрытый текст

изображение_2020-12-09_144013.pngHM3.JPG

При вводе в русской раскладке все без ошибок

Изменено пользователем malvi.dp
Ссылка на сообщение
Поделиться на других сайтах
15 минут назад, malvi.dp сказал:

Но, вставленный файл не сопряжен (не зафиксирован)

Если вставляется правильно, то не надо с него снимать фиксацию, закомментировать строку (и дальше тогда можно закомментить добавление сопряжения):

Цитата

'swModel.UnfixComponent

 

17 минут назад, malvi.dp сказал:

масса не соответствует введенной в окошке (она остается изначальной).

Если надо менять массу вставляемого компонента, а не всей сборки  (в приведённом макросе меняется масса всей сборки), то массу надо менять в добавляемой детальке сразу после её открытия перед вставкой в сборку:

Цитата

...

Set tmpObj = swApp.OpenDoc6("D:\Work\H.SLDPRT", 1, 32, "", errors, longwarnings)

val = InputBox("Ввести значение массы, кг", "Окно ввода значения", "100")

Set MyMassProp = tmpObj.Extension.CreateMassProperty

    Dim vCofG                   As Variant
    vCofG = MyMassProp.CenterOfMass
    Debug.Print MyMassProp.SetAssignedMassProp(val, vCofG(0), vCofG(1), vCofG(2), swAllConfiguration, "")

Set swModel = swApp.ActivateDoc3(AssemblyTitle, True, 0, errors)

...

 

Соответственно эти строки строки удалить дальше.

30 минут назад, malvi.dp сказал:

При вводе в русской раскладке все без ошибок

Вероятно связано с тем что вы вводите в качестве разделителя ТОЧКА или ЗАПЯТАЯ, что бы устранить эти вопросы можно заменять на нужный знак, например, точку на запятую:

val = Replace( InputBox("Ввести значение массы, кг", "Окно ввода значения", "100"), ".", ",")

Ссылка на сообщение
Поделиться на других сайтах

@Kelny , спасибо все получилось!

Осталось только разобраться с фиксацией компонента или сопряжения по исх. точке.

Закомментировать "'swModel.UnfixComponent" не помогает.

Изменено пользователем malvi.dp
Ссылка на сообщение
Поделиться на других сайтах
33 минуты назад, malvi.dp сказал:

Закомментировать "'swModel.UnfixComponent" не помогает.

Оно вроде вообще ни на что не должно влиять в данном макросе.

 

Если компонент вставляется куда надо, то вероятно можно зафиксировать строкой:

Цитата

...

Set swInsertedComponent = swModel.AddComponent5("D:\Work\H.SLDPRT", 0, "", False, "", 0, 0, 0)

swInsertedComponent.IsFixed True

...

 

33 минуты назад, malvi.dp сказал:

или сопряжения по исх. точке.

Вероятно тут надо учитывать локализацию и задавать то что написано в дереве проектирования (а может и в другом проблема), например:

Цитата

'        ' Create the name of the mate and the names of the points to use for the mate
    FirstSelection = "Point1@Исходная точка@" + strCompName & "@" + AssemblyName
    SecondSelection = "Point1@Исходная точка" '+ AssemblyTitle 'AssemblyName

 

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах
18 минут назад, Kelny сказал:

swInsertedComponent.IsFixed True

Что-то не хочет

Скрытый текст

изображение_2020-12-09_160133.png

 

22 минуты назад, Kelny сказал:

'        ' Create the name of the mate and the names of the points to use for the mate
    FirstSelection = "Point1@Исходная точка@" + strCompName & "@" + AssemblyName
    SecondSelection = "Point1@Исходная точка" '+ AssemblyTitle 'AssemblyName

Это тоже не работает

Ссылка на сообщение
Поделиться на других сайтах
20 минут назад, malvi.dp сказал:
42 минуты назад, Kelny сказал:

swInsertedComponent.IsFixed True

Что-то не хочет

Вероятно не доглядел и эта функция ни чего не меняет, а только сообщает - был не прав.

 

Тогда всё же вернуться  к имеющимся строкам (то есть по имени выбирается компонент и на этот раз фиксируется, а не наоборот):

Цитата

    longstatus = swModel.Extension.SelectByID2(strCompName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
    swModel.FixComponent

 

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, malvi.dp сказал:

вставленный файл не сопряжен (не зафиксирован) и масса не соответствует введенной в окошке (она остается изначальной).

Осталось совсем малость ))

@malvi.dp Можешь записать макросом освобождение/фиксацию компонента в 2016 солиде? Пробовал под 2014 солид и тоже, почему-то не освобождается и не фиксируется после вставки.

Чтобы делался виртуальным и массу менял у детали, получилось сделать. 

Солид с русским интерфейсом?

1 час назад, Kelny сказал:

Если надо менять массу вставляемого компонента, а не всей сборки  (в приведённом макросе меняется масса всей сборки), то массу надо менять в добавляемой детальке сразу после её открытия перед вставкой в сборку

Меняется масса нормально, уже у выбранной виртуальной детали

Set swComp = swModel.GetComponentByName(strCompName)

Set swRefDoc = swComp.GetModelDoc2
    Set MyMassProp = swRefDoc.Extension.CreateMassProperty2

Ссылка на сообщение
Поделиться на других сайтах
30 минут назад, Kir95 сказал:

Можешь записать макросом освобождение/фиксацию компонента в 2016 солиде? 

Скрытый текст

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
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.Extension.SelectByID2("_Äåòàëü 164711-1@8_30061.3.2.12_Óñòðîéñòâî ïðèæèìíîå", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Part.FixComponent
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("_Äåòàëü 164711-1@8_30061.3.2.12_Óñòðîéñòâî ïðèæèìíîå", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("_Äåòàëü 164711-1@8_30061.3.2.12_Óñòðîéñòâî ïðèæèìíîå", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Part.FixComponent
Part.ClearSelection2 True
End Sub

 

30 минут назад, Kir95 сказал:

Чтобы делался виртуальным и массу менял у детали, получилось сделать. 

Солид с русским интерфейсом?

Да, я так понял, что масса меняется до виртуализации.

Да

Думаю, что и фиксацию/сопряжение нужно делать до виртуализации. Потому что при виртуализации к имени файла добавляется слово "Копия". Возможно из-за этого и не получается это сделать. 

Изменено пользователем malvi.dp
Ссылка на сообщение
Поделиться на других сайтах
9 минут назад, malvi.dp сказал:

Чтобы делался виртуальным и массу менял у детали, получилось сделать

Это был не вопрос - для 2014 солида я сделал уже )

Ещё с сопряжением по исходной точке поэкспериментировать нужно. При вставке совмещаются 0 точка сборки и центр масс детали, а нужно по 0 точке детали?

Ссылка на сообщение
Поделиться на других сайтах
Только что, Kir95 сказал:

При вставке совмещаются 0 точка сборки и центр масс детали, а нужно по 0 точке детали?

Без разницы, в идеале по исходным точкам сб и де

Ссылка на сообщение
Поделиться на других сайтах

@malvi.dp Сделал, чтобы деталь выравнивалась по исходным точкам, проверил на 2014 и 2021, посмотри, как отработает в 2016. Чтобы в тексте не было кракозябров, перед копированием переключись на русскую раскладку. Может, если покажет ошибку, нужно будет закомментировать/раскомментировать строки с точками для выбора (в тексте посмотри ENGLISH/RUSSIAN)

 Инфа для тех, кто только пришёл) - макрос добавляет в сборку деталь, выравнивает её по исходным точкам, делает эту деталь виртуальной, меняет её массу на значение, введённое в окошке (путь к детали можно переписать в тексте и закомментировать строки с массой, если не нужно менять).

 Виртуальную деталь удобно использовать для спецификации, к примеру, прописывашь материалы, кол-во в исходной, затем в виртуальной меняешь значения под сборку. Фурнитуру в мебели, клей, краску и т.п. (кто-то здесь на форуме поделился опытом, уже не помню, кто)

Скрытый текст

Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDocExt As ModelDocExtension
Dim swAssy As AssemblyDoc
Dim swComp As Component2
Dim swRefDoc As SldWorks.ModelDoc2
Dim swRefDocName As String
Dim AssemblyTitle As String
Dim AssemblyName As String
Dim boolstat As Boolean
Dim strings As Variant
Dim matefeature As SldWorks.Mate2 'Feature
Dim FirstSelection As String
Dim SecondSelection As String
Dim strCompName As String
Dim selCompName As String
Dim mateError As Long
Dim MyMassProp As SldWorks.MassProperty
Dim val As String
Dim massval As Double
Dim longstatus As Boolean, longwarnings As Long

Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If swModel.GetType <> swDocASSEMBLY Then
MsgBox "Open Assy"
Exit Sub
End If

AssemblyTitle = swModel.GetTitle
strings = Split(AssemblyTitle, ".")
AssemblyName = strings(0)

Dim tmpObj As ModelDoc2
Dim errors As Long
Set tmpObj = swApp.OpenDoc6("D:\Work\H.SLDPRT", 1, 32, "", errors, longwarnings)
Set swModel = swApp.ActivateDoc3(AssemblyTitle, True, 2, errors) '0
Dim swInsertedComponent As Component2
Set swInsertedComponent = swModel.AddComponent5("D:\Work\H.SLDPRT", 0, "", False, "", 0, 0, 0)
    Debug.Print "swInsertedComponent.Name: " + swInsertedComponent.Name2
    
    ' Make the component virtual
    longstatus = swInsertedComponent.MakeVirtual '(True)
 
    ' Get the name of the component for the mate
    strCompName = swInsertedComponent.Name2
    Debug.Print "strCompName: " + strCompName
    
    selCompName = swInsertedComponent.Name2 + "@" + AssemblyName
    Set swAssy = swModel
    longstatus = swModel.Extension.SelectByID2(selCompName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
    swAssy.UnfixComponent
'        swAssy.FixComponent
'        Stop

swModel.ClearSelection2 True
swApp.CloseDoc "D:\Work\H.SLDPRT"

val = Replace(InputBox("Ввести значение массы, кг", "Окно ввода значения", "100"), ".", ",")
Set swComp = swModel.GetComponentByName(strCompName)
Set swRefDoc = swComp.GetModelDoc2
Set MyMassProp = swRefDoc.Extension.CreateMassProperty
    Debug.Print "OverrideMass property is set to " & MyMassProp.OverrideMass
    Debug.Print "Mass is overridden? " & MyMassProp.SetOverrideMassValue(val, swThisConfiguration, Nothing)
    Debug.Print "Mass properties after override"
    massval = MyMassProp.Mass
    Debug.Print "Mass: " & massval
    
    swModel.ClearSelection2 (True)
    
    Set swModel = swApp.ActivateDoc3(AssemblyTitle, True, 0, errors)
    Set swDocExt = swModel.Extension
    
'   ENGLISH Create the name of the mate and the names of the points to use for the mate
    FirstSelection = "Point1@Origin@" + strCompName & "@" + AssemblyName
    SecondSelection = "Point1@Origin" '+ AssemblyTitle 'AssemblyName
    
'   RUSSIAN Create the name of the mate and the names of the points to use for the mate
'    FirstSelection = "Точка1@Origin@" + strCompName & "@" + AssemblyName '+ AssemblyTitle '
'    SecondSelection = "Точка1@Origin" '+ AssemblyTitle '+ AssemblyTitle

    ' Select the points to mate
    boolstat = swDocExt.SelectByID2(FirstSelection, "EXTSKETCHPOINT", 0, 0, 0, True, 0, Nothing, 0)
    boolstat = swDocExt.SelectByID2(SecondSelection, "EXTSKETCHPOINT", 0, 0, 0, True, 0, Nothing, 0)

    Debug.Print " name1 - " & FirstSelection
    Debug.Print " name2 - " & SecondSelection

    ' Add the mate sw2014 сопрягает по исх. точкам и НЕ выравнивает по осям
'    Set matefeature = swAssy.AddMate4(swMateCOINCIDENT, swMateAlignALIGNED, False, 0, 0, 0, 0, 0, 0, 0, 0, False, False, mateError) 'swMateCOORDINATE
    
    ' Add the mate sw2016 сопрягает по исх. точкам и выравнивает по осям
    Set matefeature = swAssy.AddMate4(swMateCOORDINATE, swMateAlignALIGNED, False, 0, 0, 0, 0, 0, 0, 0, 0, False, False, mateError) 'swMateCOORDINATE

    ' Add the mate sw2016-2021 сопрягает по исх. точкам и выравнивает по осям
'    Set matefeature = swAssy.AddMate5(swMateCOORDINATE, swMateAlignALIGNED, False, 0, 0, 0, 0, 0, 0, 0, 0, False, True, 0, mateError)
    Debug.Print "Mate added: " & matefeature.Name

    swModel.ViewZoomtofit2
    swModel.EditRebuild3

End Sub

 

 

7 часов назад, Kelny сказал:
8 часов назад, malvi.dp сказал:

При вводе в русской раскладке все без ошибок

Вероятно связано с тем что вы вводите в качестве разделителя ТОЧКА или ЗАПЯТАЯ, что бы устранить эти вопросы можно заменять на нужный знак, например, точку на запятую:

val = Replace( InputBox("Ввести значение массы, кг", "Окно ввода значения", "100"), ".", ",")

Подмена точки на запятую работает )

 

Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, Kir95 сказал:

посмотри, как отработает в 2016.

Спасибо! Заметил такую особенность: если запустить макрос в пустой сборке - он отрабатывает без ошибок! НО, если в сборке находятся уже какие-то детали, то компонент вставляется с нужной массой, делается виртуальным, но не сопрягается + выскакивает ошибка

Скрытый текст

HM1.JPGHM7.JPG

 

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, malvi.dp сказал:

если в сборке находятся уже какие-то детали, то компонент вставляется с нужной массой, делается виртуальным, но не сопрягается + выскакивает ошибка

Создал сборку с тремя деталями - макрос отработал без ошибок, но в старой сборке так с ошибкой и отрабатывает (может в самой сборке что-то не так, непонятно).

Вобщем, макрос получился рабочий!

@Kir95 , @Kelny - Спасибо за помощь!

 

PS; Макрос отрабатывает с ошибкой, если в сборке есть подсборка!

Изменено пользователем malvi.dp
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.



×
×
  • Создать...