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

групповое изменение свойств материалов


fol@bzz.ru

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

Уважаемые, подскажите плиз. поиском не нашел. суть - работаем в основном с металом, плотность одинаковая. но на какой то ранней версии солида пришлось ее изменить в шаблоне, уменьшив в 1000 раз, для корректного отображения на чертеже массы. а теперь при совместном использовании деталей с другими конструкторами вылезают бяки, например болт, весящий в 1000 раз больше. подскажите, может есть способ поправить дело, поменяв во всех файлах разом плотность? может есть макрос какой или плагин. заранее спасибо

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


Базу материалов откройте блокнотом, и используйте "найти и заменить" (копию не забудьте перед операцией сделать)

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

все немного сложнее. материал не выбран из списка, а забит вручную в "инструменты-параметры-свойства документа -свойства материала". в шаблоне детали проставлена плотность, выбрана штриховка (изз-за штриховки, кстати, и не использую солидовские материалы). и вопрос об изменении плотности деталей, сделанных из этого шаблона. Хелп! :surrender:

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

А я Вам Солидовские материалы и не показывал. Это мои материалы. Гораздо проще создать свою базу материалов, чем что-то делать в шаблоне. В своей базе у меня и обозначения забиты по ГОСТ и ТУ - никаких проблем - и штриховки любые - и свойства любые - а шаблоны нужно использовать для другого. (Я так думаю, но может и ошибаюсь). Вообще у меня 2 базы материалов + в экстренных случаях использую и Солидовскую.

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

но суть то вопроса в другом - возможно ли относительно быстро поменять плотность в свойствах тысяч уже готовых деталей на другое число :wallbash:

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

Средствами API-интерфейса примерно так (это соотвесвенно для одного документа):

Sub main()

Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

Set swApp = CreateObject("SldWorks.Application")

Set swModel = swApp.ActiveDoc

'Можно посмотреть предыдущее значение:

Msgbox swModel.getUserPreferenceDoubleValue(swMaterialPropertyDensity)

'Изменить значение плотности, при условии, что не задан материал:

retval = swModel.SetUserPreferenceDoubleValue(swMaterialPropertyDensity, 3 * (10 ^ 3))

'вместо 3 * (10 ^ 3) заменить необходимым значением плотности

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

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

Так Вы и на будущее себя оградите от сделанной когда-то "неточности", выбросите "лишние" шаблоны (а я Вам это рекомендую).

Лучше поздно, чем никогда.

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

Средствами API-интерфейса примерно так (это соотвесвенно для одного документа):

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

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

то есть для этого все равно все эти тысячи деталей нужно открыть

Открывать нужно по любому, так как формат файлов является закрытым и не имеет спецификации. Единственно, что можно сделать, так это программно открывать файл, вносить изменения и закрывать.
Ссылка на сообщение
Поделиться на других сайтах

просто не факт что забытый какой нить болт не увеличит массу сборки на тонну

Увеличит, еще как увеличит.

Вот пример, когда на старте был сделан небольшой шаг не в ту сторону - смещение совсем маленькое, но в пути дало большую погрешность.

Начиная дело - 7 раз отмерь.

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

Чужое горе - снова напоминает о необходимости СТАНДАРТА.

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

Увеличит, еще как увеличит

ну вы бы не каркали-может, не увеличит...

просто не факт что забытый какой нить болт не увеличит массу сборки на тонну... спасибо всем. ..

Я бы вначале проверил, какие плотности у компонентов на самом деле...

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

"""""""""""""""

Option Explicit

Public Enum swUserPreferenceDoubleValue_e

swMaterialPropertyDensity = 7

End Enum

Public i As Long

Public k As Long

Public strArr() As String

Dim swChildName As String

Dim strHideComp As String

Dim swChildModel As ModelDoc2

Dim dDensity As Double

Public Function AddToArr(sStr As String, i As Long, dDensity As Double) As String()

ReDim Preserve strArr(1, i - 1)

strArr(0, i - 1) = sStr

strArr(1, i - 1) = dDensity

End Function

Public Function GetList(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, swComp As SldWorks.Component2) As String()

Dim swChildComp As SldWorks.Component2

Dim vChildCompArr As Variant

Dim vChildComp As Variant

Dim strHideCompArr() As String

Dim strHideComp As String

ReDim Preserve strHideCompArr(0)

vChildCompArr = swComp.GetChildren

For Each vChildComp In vChildCompArr

Set swChildComp = vChildComp

swChildName = swChildComp.Name2

Set swChildModel = swChildComp.GetModelDoc

dDensity = swChildModel.GetUserPreferenceDoubleValue(swMaterialPropertyDensity)

i = i + 1

AddToArr swChildName, i, dDensity

If UBound(swChildComp.GetChildren) > 0 Then

GetList swApp, swModel, swChildComp

End If

Next

End Function

Sub main()

Dim swApp As Object

Dim swModel As SldWorks.ModelDoc2

Dim swAssy As Object

Dim swConfig As SldWorks.Configuration

Dim swRootComp As SldWorks.Component2

Dim strHideCompArr() As String

Dim j

Dim RootDir As String

Dim TextV As String

Dim sPath As String

i = 0

ReDim strArr(1, 0)

strArr(0, 0) = ""

strArr(1, 0) = ""

Set swApp = CreateObject("SldWorks.Application")

Set swModel = swApp.ActiveDoc

Set swAssy = swModel

Set swConfig = swModel.GetActiveConfiguration

Set swRootComp = swConfig.GetRootComponent

sPath = swModel.GetPathName

Dim index As Long

index = InStrRev(sPath, "\")

RootDir = Left(sPath, index)

GetList swApp, swModel, swRootComp

TextV = ""

For j = 0 To UBound(strArr, 2)

TextV = TextV & vbCrLf + strArr(1, j)

Next j

If i = 0 Then

MsgBox "The assembly has not Components!"

End

End If

On Error Resume Next

Dim Excel As Object

Dim excelSheet As Object

' Start Excel

Set Excel = GetObject(, "Excel.Application")

If Err <> 0 Then

Err.Clear

Set Excel = CreateObject("Excel.Application")

If Err <> 0 Then

MsgBox "Could not load Excel.", vbExclamation

End

End If

End If

On Error GoTo 0

Excel.Visible = True

Excel.Workbooks.Add

Set excelSheet = Excel.ActiveWorkbook.Sheets(1)

Debug.Print excelSheet.Name

excelSheet.Columns("c").ColumnWidth = 50

excelSheet.Columns("d").ColumnWidth = 20

For k = 1 To UBound(strArr, 2) + 1

excelSheet.range("c" & k).Value = strArr(0, k - 1)

excelSheet.range("d" & k).Value = strArr(1, k - 1)

Next k

On Error GoTo Finish:

excelSheet.SaveAs RootDir + "ListOfDensities"

Excel.Quit

Finish:

End Sub

"""""""""""""""""""""""

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

Я бы вначале проверил, какие плотности у компонентов на самом деле...

А зачем выводить в Excel? Автору топика надо сразу поменять плотность, которая несоответствует нужной. Причем

то есть для этого все равно все эти тысячи деталей нужно открыть

На мой взгляд, метод, предложенный Kelny, оптимальнее. Естесственно с некоторыми доработками. Один раз и навсегда, или до следующих изменений в SW (но вроде менять то здесь нечего). .
Ссылка на сообщение
Поделиться на других сайтах

ну вы бы не каркали-может, не увеличит...

Ну КВА....

материал не выбран из списка, а забит вручную в

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

Здесь только перебор всех файлов. И, может быть, просто назначение "правильного" материала. Во всяком случае действий меньше чем изменение плотности.

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

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

Если с помощью API SW, то, что в лоб, что по лбу. Результат одинаковый....
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

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




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