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

Свойства листового металла в базе материалов


VOleg

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

Всем добрый день.

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

Может кто знает?

изображение_2022-09-20_212358544.png

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


UnPinned posts

@VOleg  Вот кусок из моего макроса:

' Подпрограмма добавления свойств листового металла
Sub AddSheetMetalProperties(CompPath As String)
  
On Error Resume Next
  
    'Определяем переменные
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swModelDocExt As SldWorks.ModelDocExtension
    Dim swFeat As SldWorks.Feature
    Dim swDeleteFaceFeature As SldWorks.DeleteFaceFeatureData
    Dim swCustPropMgr As SldWorks.CustomPropertyManager
    Dim names As Variant
    Dim PartName1 As String
    Dim featureName As String
    Dim boolstatus As Boolean
    Dim opt As Long
    Dim lErrors As Long
    Dim lWarnings As Long
    Dim lRetVal As Variant

    'Подключаемся к приложению
    Set swApp = Application.SldWorks
        
    'получаем выбранный документ
    Set CmpDoc = swApp.ActiveDoc 
    Set swModel = CmpDoc
    Set swModelDocExt = swModel.Extension
      
    'Получаем текущую конфигурацию компонента
    Dim CompConfig As String
    CompConfig = CmpDoc.GetActiveConfiguration.Name
    
    'Получаем имя документа (файла)
    PartName1 = CmpDoc.GetTitle
                    
    'Проверяем содержит ли имя файла расширение или нет (это зависит от настроек windows) если содержит, то убираем его
    PartName1 = Replace(PartName1, ".SLDPRT", "")
    PartName1 = Replace(PartName1, ".sldprt", "")

    ' Определяем самый первый элемент (фичерс) в дереве
    Set swFeat = swModel.FirstFeature
    
    'Пробегаем цыклом по дереву пока не закончатся все элементы (фичерсы)
    Do While Not swFeat Is Nothing
        
        If swFeat Is Nothing Then
            Exit Do
        End If
 
        'Записываем в переменную featureName имя текущего элемента (фичерса)
        featureName = swFeat.Name
        
        'Проверяем имя элемента (фичерса) и если оно совпадает с CutListFolder, значит деталь выполнена командами листового металла
        If swFeat.GetTypeName2 = "CutListFolder" Then
  
             Здесь выполняем действия для деталей из листового металла
  
        End If
        
        'Переходим к следующему элементу
        Set swFeat = swFeat.GetNextFeature
        
        'Метка цикла
    Loop

    ' принудительное перестроение, скрытое сохранение и обнуление объектов
    boolstatus = CmpDoc.ForceRebuild3(True)
    boolstatus = CmpDoc.Save3(swSaveAsOptions_Silent, lErrors, lWarnings)
    Set swModel = Nothing
    Set CmpDoc = Nothing
    
End Sub

 

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

@VOleg  Вот кусок из моего макроса:

 

Спасибо. Буду пробовать.

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

@VOleg  Вот кусок из моего макроса:

 

Спасибо.

Что-то получилось. Потом подправлю получше.

GetKodMat.swp

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

Итак, проверяем все элементы, и если находится   CutListFolder, то я переменной TipDetali = "ЛистоваяДеталь" и выходим из цикла в противном случае TipDetali = "ТвердоеТело".

  ' Определяем самый первый элемент (фичерс) в дереве

 Set swFeat = swModel.FirstFeature

    ' В цикле проверяем все элементы дерева и если найдется листовая деталь заканчиваем цикл

Do While Not swFeat Is Nothing

    If swFeat Is Nothing Then

           Exit Do

    End If

    featureName = swFeat.Name

    If swFeat.GetTypeName2 = "CutListFolder" Then

      TipDetali = "ЛистоваяДеталь"

        Exit Do

        Else

     TipDetali = "ТвердоеТело"

    End If

    Set swFeat = swFeat.GetNextFeature

 Loop

'    MsgBox TipDetali

Вот только дальше что-то не работает:

If TipDetali = ЛистоваяДеталь Then - вот это не реагирует??????

.....

  End If

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

If TipDetali = ЛистоваяДеталь Then - вот это не реагирует??????

Так сравнивает две переменные, причём вторая не объявлена - вот и выходит FALSE в сравнении.

Кавычки где?

If TipDetali = "ЛистоваяДеталь" Then '- вот это не реагирует??????

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

Так сравнивает две переменные, причём вторая не объявлена - вот и выходит FALSE в сравнении.

Кавычки где?

If TipDetali = "ЛистоваяДеталь" Then '- вот это не реагирует??????

Спасибо, кавычки добавил.

теперь не работает эта конструкция:

            MsgBox свойствоФОРМАТ
            If свойствоФОРМАТ = "БЧ" Then
                swCustPropMgr.Add2 name5, swCustomInfoText, valu4
            End If
 

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

            If свойствоФОРМАТ = "БЧ" Then
                swCustPropMgr.Add2 name5, swCustomInfoText, valu4
            End If

Это свойство уже есть в документе? Возможно поэтому и не добавляет.

 

Делал так:

    bRet = ModelDoc2.AddCustomInfo3("", name5, swCustomInfoText, valu4)
    If bRet = False Then ModelDoc2.CustomInfo2("", name5) = valu4

 

Ещё вариант удалять свойство и вставлять по новой, но тогда свойство добавляется в конец списка - не хорошо это.

 

В вашей функции (соответственно надо подправить условие IF, хотя возможно 0 и 1 сможет воспринять как True или False):

Цитата

 

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

Это свойство уже есть в документе? Возможно поэтому и не добавляет.

 

Не работает само IF

            If свойствоФОРМАТ = "БЧ" Then
             MsgBox "Свойство Формат БЧ"
            End If
 

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

@VOleg БЧ - в свойство ручками писали? Может пробел справа или слева есть? Поэтому "БЧ" не равно " БЧ" или "БЧ "

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

Ещё вариант удалять свойство и вставлять по новой, но тогда свойство добавляется в конец списка - не хорошо это.

У Артема на сайте есть макрос по сортировке свойств по алфавиту.

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

@VOleg БЧ - в свойство ручками писали? Может пробел справа или слева есть? Поэтому "БЧ" не равно " БЧ" или "БЧ "

У Артема на сайте есть макрос по сортировке свойств по алфавиту.

БЧ выбирается из списка. Пробелов спереди и сзади нет.

А в Солид АПИ "alltrim" - удаление всех начальных и концевых пробелов есть?

            TipDetali = свойствоФормат
             MsgBox TipDetali
Вот так тоже не работает в сообщении появляется пустое окно

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

А в Солид АПИ "alltrim" - удаление всех начальных и концевых пробелов есть?

Это есть в VBA, можете в окне редактора макросов выбрать СПРАВКА(?) или тырнете и там:

Trim, Ucase

например, If Trim(Ucase(свойствоФОРМАТ)) = "БЧ" Then 'сделает текст прописными буквами и удалить пробелы слева и справа

 

Что бы проверить, нет ли чего лишнего в перменной можно либо проверить строку на наличие проблелов:

MyPos = Instr(1, SearchString, "W")    ' Returns 0.
или количество символов
MyString = "Hello World" ' Initialize variable.
MyLen = Len(MyString) ' Returns 11.

 

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

            TipDetali = свойствоФормат
             MsgBox TipDetali
Вот так тоже не работает в сообщении появляется пустое окно

Значит нет чи него в TipDetali или свойствоФормат, ищите выше, где этим переменным присваивается значение.

Можно поставить крастные точки в левом столбце (серый столбик слева от кода) в этих местах для проверки (выполнение кода будет останавливаться в этих местах) что там назначается наводя мышкой на переменные или AddWatches... в соответствующем окошке.

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

img-QZnXj0.png

 

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

Значит нет чи него в TipDetali или свойствоФормат, ищите выше, где этим переменным присваивается значение.

 

Формат.PNG

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

@VOleg Ни чего нет в обозначенных переменных. В свойствах файла есть, но не присвоено ни чего переменным:

2 часа назад, VOleg сказал:

            TipDetali = свойствоФормат
             MsgBox TipDetali
Вот так тоже не работает в сообщении появляется пустое окно

 

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

@VOleg Ни чего нет в обозначенных переменных. В свойствах файла есть, но не присвоено ни чего переменным:

 

Я не знаю как присвоить переменной значение свойства файла.

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

Я не знаю как присвоить переменной значение свойства файла.

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

    'Читаем свойство Наименование
    Dim Val As String
    Dim ValOut As String

    lRetVal = swCustPropMgr.Get4("Наименование", False, Val, ValOut)

    Debug.Print "Наименование: " + ValOut

В переменную Val падает формула, если она прописана в свойство (например масса), а в переменную ValOut - вычисленное значение по этой формуле. Если в свойстве просто текст, то без разницы что брать Val или ValOut

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

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


    'Читаем свойство Наименование
    Dim Val As String
    Dim ValOut As String

    lRetVal = swCustPropMgr.Get4("Наименование", False, Val, ValOut)

    Debug.Print "Наименование: " + ValOut

В переменную Val падает формула, если она прописана в свойство (например масса), а в переменную ValOut - вычисленное значение по этой формуле. Если в свойстве просто текст, то без разницы что брать Val или ValOut

Отлично. А из средней вкладки как получить свойство? Ведь Формат чертежа не изменяется для разных конфигураций.

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

Нашел такую конструкцию. Но тоже ничего не выдает

 Set mde = swModel.Extension
   Set cpm = mde.CustomPropertyManager("")
  cpm.Get3 Формат, True, Val, ValOut
 MsgBox Val + ValOut
 

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

Но тоже ничего не выдает

Пробовали писать предложения без знаков препинания? Понять смысл в этом случае получается?

А почему программа вас должна понимать, если знаки препинания постоянно забываются?

Кавычки где? В вашем варианте без кавычек в переменной Формат наверняка ни чего нет - пусто/vbNullString/"" и т.п.

2 часа назад, VOleg сказал:

cpm.Get3 "Формат", True, Val, ValOut

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

Dim Формат as String

Формат = "Формат"

тогда можно оставить как есть:

cpm.Get3 Формат, True, Val, ValOut 'Val - столбец Значение/Текстовое выражение, ValOut - столбец Вычисленное значение

https://help.solidworks.com/2010/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icustompropertymanager~get3.html

 

Возможно стоило использовать, что возвращает эта функция Get3, что бы контролировать, что свойство есть по возвращаемому в bRet:

Dim bRet as Boolean

bRet = cpm.Get3 ("Формат", True, Val, ValOut)

А в случае отсутствия принимать меры: if bRet = False then ... тут то что надо сделать, если свойства нет или проблемы с чтением (спросить пользователя, например, InputBox или задать нужное на основании анализа документа).

 

@VOleg поробуйте в начале модуля добавить следующее:

Option Explicit 'требование явного объявления переменных в модуле

Это не позволит использовать в коде не объявленные явным образом переменные и будет требовать исправить (объявить или удалить/закомментировать, ковычки поставить и т.п.).

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

Пробовали писать предложения без знаков препинания?

 

@VOleg поробуйте в начале модуля добавить следующее:

Option Explicit 'требование явного объявления переменных в модуле

 

Спасибо огромное!!!

Лично я мало чего пишу - я копирую из тех макросов, которые могу найти со сходными функциями.

Кавычки добавил, заработало. Буду продолжать копаться.

Option Explicit ' автор моего макроса выключил. Почему-то.

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

автор моего макроса выключил. Почему-то.

Вероятно ему лениво объявлять переменные: Dim ПЕРЕМЕННАЯ [as ТипНапримерString]

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

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

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

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

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

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

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

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

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

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

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




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