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

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

06.08.2021 в 15:19, malvi.dp сказал:

как средствами АПИ в имеющуюся спецификацию к чертежу вставить столбец справа с определенным св-вом, например масса?

Option Explicit
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swTable As SldWorks.ITableAnnotation
    Dim swAnn As SldWorks.Annotation
    Dim SelMgr As SldWorks.SelectionMgr
    Dim bool As Boolean
    
Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set SelMgr = swModel.SelectionManager
    Set swTable = SelMgr.GetSelectedObject6(1, -1)
    
    bool = swTable.InsertColumn2(swTableItemInsertPosition_After, 3, "Масса", swInsertColumn_DefaultWidth)
    bool = swTable.SetColumnType3(4, swBomTableColumnType_CustomProperty, False, "Масса")
    
End Sub

 

в макросе добавляет 4 столбец (в скобках номера 3 и 4 поменяй на необходимые)

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


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

swBomTableColumnType_CustomProperty

Спасибо, на этом месте выскакивает "Variable not definet"

sw2016sp5

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

на этом месте выскакивает "Variable not definet"

А солид какой? Этот макро начиная с 2019 должен работать, вроде бы. Для более ранних версий не нашёл, как пользователькое свойство добавлять, мож кто подскажет ещё

08.08.2021 в 00:50, Snake 60 сказал:

строка выделаяет таблицу, где strTableName - переменная с имененм таблицы, vSheetNames(i) - имя листа

Вот это самое интересное, как имена таблиц и листов получаешь?

 

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

что-то не пошло - на последней строке выдает "Type Missmatch"

Может не правильно определил переменные?

Запиши макрос, когда выделяешь таблицу - в коде увидишь, как она называется

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

Вот это самое интересное, как имена таблиц и листов получаешь?

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

Там можешь глянуть:MassFontChange.zip

SW 2018 SP5

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

Для более ранних версий не нашёл, как пользователькое свойство добавлять, мож кто подскажет ещё

Для более ранних версий подходит такая запись

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

bool = swTable.SetColumnCustomProperty(номер столбца, "Имя_св-ва")
 

 

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

Для более ранних версий подходит такая запись

а на 21 солиде просто название столбцу добавляет, я пробовал изначально

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

Добрый день, коллеги!

Подскажите, как средствами АПИ найти заметку "Формат" на листе чертежа и считать ее?

Нужно для подсчета площади разработанных листов. Листов может быть более одного. 

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

Format.JPG

 

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

Если нужно посчитать именно площадь всех листов, то я бы перебрал все листы, посчитал площадь каждого, умножив высоту на ширину, а потом сложил.

 

Если заметка вставлялась не программно и не имеет имени, то поиск может быть произведен перебором всех заметок с анализом их содержания. Если текст заметки начинается со слова Формат, значит это, скорее всего, она.

 

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

поиск может быть произведен перебором всех заметок с анализом их содержания

Именно в этом направлении думаю двигаться.

Как перебрать заметки есть кусок кода, а вот как получить содержимое - с этим пока загвоздка.

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

как средствами АПИ найти заметку "Формат" на листе чертежа и считать ее?

Нужно для подсчета площади разработанных листов. Листов может быть более одного

Здесь в справке посмотри - солид выводит стандартные размеры листа

swDwgPaperSizes_e Enumeration - 2018 - SOLIDWORKS API Help

Здесь от @Snake 60 макрос, добавляет в свойства этот формат

 

 

Назначить площадь вместо "А4"

Case 6 Or 7
            Format = "А4"
        Case 8
            Format = "А3" ...

 

и сложить

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

Здесь в справке посмотри - солид выводит стандартные размеры листа

Спасибо за ссылки.

А как быть с нестандартными размерами: А2х3, А4х4 и т.п.? Поэтому и  решил считывать с заметки.

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

А как быть с нестандартными размерами: А2х3, А4х4 и т.п.? Поэтому и  решил считывать с заметки

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

    'Get the sheet format template
    Dim templateName As String
    templateName = activeSheet.GetTemplateName()
    Debug.Print "Sheet format template name to modify: " & templateName   

Modify and Reload Sheet Format Template Example (VBA) - 2016 - SOLIDWORKS API Help

Как заметки перебрать не подскажу, мож попадётся чего, тогда напишу

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

Sub read_list_size()

    Dim swapp           As SldWorks.SldWorks
    Dim I_Sh            As SldWorks.Sheet       'объектная модель "Лист"
    Dim Sh_Prp          As Variant              'массив свойства листа
    Dim Sh_Names        As Variant              'массив имен существующих листов
    Dim Draw        As SldWorks.ModelDoc2
    Dim i_lst           As Integer              'счетчик


    Set swapp = Application.SldWorks
    Set Draw = swapp.ActiveDoc
'массив из имен листов:
    Sh_Names = Draw.GetSheetNames
'Цикл по листам:
    For i_lst = 0 To UBound(Sh_Names)
        Set I_Sh = Draw.Sheet(Sh_Names(i_lst))
        bRet = Draw.ActivateSheet(Sh_Names(i_lst))
       '   Переключаемся на редактирование форматки:
        Draw.EditTemplate
        ' Вытащим формат листа.
          Sh_Prp = I_Sh.GetProperties
        ' Размеры листа по горизонтали содержаться в свойстве Sh_Prp(5)
        ' Размеры листа по вертикали содержаться в свойстве Sh_Prp(6)

Debug.Print Sh_Prp(5)
Debug.Print Sh_Prp(6)

        '   Переключаемся на редактирование листа:
                Draw.EditSheet
    Next
End Sub

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

@Kir95@v-david спасибо за наводку!

Использовал имя основной надписи чертежа и из нее извлекал формат

Макрос считает колличество листов СП и Листов чертежа, а так же общую площадь листов в формате А1. Еще присутствует идентификатор групповой СП, вдруг кому пригодится.

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

Sub read_list_size()

    Dim swapp           As SldWorks.SldWorks
    Dim I_Sh            As SldWorks.Sheet       'объектная модель "Лист"
    Dim Sh_Prp          As Variant              'массив свойства листа
    Dim Sh_Names        As Variant              'массив имен существующих листов
    Dim Draw        As SldWorks.ModelDoc2
    Dim i_lst           As Integer              'счетчик
    Dim templateName As String                  'Имя основной надписи листа
    Dim PathTemp As String                      'Путь к файлу основной надписи листа
    Dim bRet As Boolean
    Dim TmpName() As String
    Dim i As Integer                            'счетчик
    Dim n As Integer                            'счетчик
    Dim kSimvTemp As Integer 'К-во символов в имени
    Dim strFormat As String 'Формат
    Dim s_RL1 As Double ' Площадь разработанного 1 листа
    Dim nF_M() As String 'Нестандартный формат
    Dim nF_Format As String 'Формат стандартный
    Dim kSimvFormat As Integer 'К-во символов формата
    Dim nF_Mnoj As Integer ' Множитель нестандартого формата
    
    Set swapp = Application.SldWorks
    Set Draw = swapp.ActiveDoc
    
    iGSP = 0 'Принимаем, что групповой СП нет
    s_RL = 0 ' Принимаем плащадь разработанных листов = 0
    
'массив из имен листов:
    Sh_Names = Draw.GetSheetNames
'Цикл по листам:
    For i_lst = 0 To UBound(Sh_Names)
        Set I_Sh = Draw.Sheet(Sh_Names(i_lst))
        bRet = Draw.ActivateSheet(Sh_Names(i_lst))
       '   Переключаемся на редактирование форматки:
        Draw.EditTemplate
        PathTemp = I_Sh.GetTemplateName()
        TmpName = Split(PathTemp, "\") 'Отсекаем путь
        templateName = TmpName(UBound(TmpName))  'Получаем Имя-Расположение-Номер листа.Расширение
        TmpName = Split(templateName, "-") 'Разбиваем по "-"
        templateName = TmpName(LBound(TmpName))  'Получаем Имя основной надписи
'        Debug.Print templateName
            If Left$(templateName, 2) = "SP" Or Left$(templateName, 2) = "GS" Then
                n = n + 1 'Колличество листов СП или ГСП
                    If Left$(templateName, 2) = "GS" Then
                        iGSP = 1 ' Метка групповой СП (1-групповая СП)
                    End If
            Else: kSimvTemp = Len(templateName)
                    If kSimvTemp = 4 Then
                        nF_M = Split(templateName, "x", , vbTextCompare)
                        nF_Format = nF_M(0)
                        nF_Mnoj = nF_M(1)
                            If nF_Format = "A1" Then
                                s_RL1 = 1 * nF_Mnoj
                            ElseIf nF_Format = "A2" Then
                                s_RL1 = 0.5 * nF_Mnoj
                            ElseIf nF_Format = "A3" Then
                                s_RL1 = 0.25 * nF_Mnoj
                            ElseIf nF_Format = "A4" Then
                                s_RL1 = 0.125 * nF_Mnoj
                            Else:
                                s_RL1 = 2 * nF_Mnoj ' Если А0
                            End If
                    ElseIf templateName = "A1" Then
                        s_RL1 = 1
                    ElseIf templateName = "A2" Then
                        s_RL1 = 0.5
                    ElseIf templateName = "A3" Then
                        s_RL1 = 0.25
                    ElseIf templateName = "A4" Then
                        s_RL1 = 0.125
                    Else:
                        s_RL1 = 2  ' Если А0
                    End If
                    s_RL = s_RL + s_RL1 'Суммируем площади листов
'                    Debug.Print s_RL
            End If

'   Переключаемся на редактирование листа:
    Draw.EditSheet
    Next
    numOfShSP = n 'Колличество листов СП
    numOfShSB = i_lst - numOfShSP 'Колличество разработанных листов
End Sub

 

 

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

Листов может быть более одного. 

  Скрыть содержимое

Format.JPG

А как печатаешь такие листы?

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

А как печатаешь такие листы?

На плоттере из рулона. В зависимости от формата, можно несколько вместе печатать.

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

На плоттере из рулона. В зависимости от формата, можно несколько вместе печатать

Думал, может, на области печати разбиваешь как-то, чтоб на принтере А4 печатать несколько листов. В солиде иногда не хватает этой компасовской фишки

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

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

В экселе, знаю - Application.ScreenUpdating = False

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

как отключить обновление экрана в солиде

Dim ModView    As ModelView
Set ModView = swModel.ActiveView
ModView.EnableGraphicsUpdate = False
...
ModView.EnableGraphicsUpdate = True

 

Главное - потом включить не забыть )

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

Set ModView = swModel.ActiveView

На этой строчке затык

sw2016

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

изображение_2021-09-01_144907.png

ps: Dim swModel As SldWorks.ModelDoc2

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

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

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

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

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

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

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

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

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

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

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




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