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

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

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 пользователей

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



  • Сообщения

    • Snake 60
      Скорее всего исправляли в конкретной сборке, для конкретных тел. Насколько я помню, надо в самом эскизе профиля заполнить свойство Description
    • Snake 60
      Делаете дырку в свае - вставляете в нее трубу и 2 человеко-силы крутят сваю ) Дёшево и сердито и не нужен никакой планетарный редуктор ))
    • gudstartup
      вы всегда ищите свой путь или будете делать то что вам советуют? с самого начала прежде чем приступать к экспериментам вам нужно было вынуть носитель и сделать образ. diskcopy делает копию гибкого диска на другой а вам надо сделать образ жесткого диска или карты памяти. делайте как советует @Viktor2004 иначе еще чего нибудь сломаете или вам станок не нужен и вы его приобрели для экспериментов ? вот а печатной машинке из прошлого нельзя а вот на синумерике можно - удивительные вещи в настоящем происходят!! на 100 % уверен что там не модуль а либо писимиси ай либо жд @mircomax81 хотите работать в дос почитайте помощь по командам 
    • PuKoLLleT
      Доброго дня всем. Поделитесь опытом,раньше такое не доводилось делать. На торце фланца нужно сделать  восемь отверстий ф17H7 на токарно-фрезерном станке с осью Y ,имеется ManualGuide.В моем понимании нужно просверлить,а затем торцевой фрезой расточить нужный диаметр.Получится такой фокус,или надо разверткой доводить нужный размер?  Стойка Fanuc 0i-Tf.
    • Snake 60
      Всё верно, я даже русификатор делал для него (ушло на это где-то около года). Хороший софт был, я всех знакомых на него подсадил в свое время :) У меня даже где-то образ на виртуалке лежит с SW2014+MechSoft, Жаль, что автодеск его поглотил, а не DS :( А по сути вопроса, проектировал двухступенчатый планетарный редуктор в свое время. Что было нужно: Справочник по планетаркам (автора не помню, если надо поищу), из софта MathCAD + GearTeq (софтина идет вместе с GearTrax, только рассчитывает и моделирует несколько зацеплений согласно выбранной схеме, в том числе планетарки) Ой и ошибаетесь. Звездочки - не равно зубчатые колеса в планетарке) Мы намучились с малой точностью изготовления на эл.эрозии, а Вы лазером ))) Был собран опытный образец редуктора с незакаленными деталями, чисто проверить геометрию, отладить сборку. Так потом начальство этот редуктор сказало испытать в бою, как я не противился)) Помер за пару дней интенсивных нагрузок ))) Материал, термообработка и точности изготовления решают )
    • Snake 60
      @Тихоход  Ещё один вариант - изучать программирование и писать свою программу/макрос. Вот пример конфигуратора двери: https://www.youtube.com/watch?v=wv4HryWQBSk
    • mircomax81
      Посредством Diskcopy можно сделать адекватную копию на флоппи диск?
    • Andrey_kzn
      Да, ведь советовали автору вытащить жёсткий диск и сделать образ. Неужели самому не интересно, как устроен этот старый промкомпьютер? Там может стоять как жёсткий диск, так и CF-карта, или же Disc-on-chip или Disc-on-module.  Как-то очень давно, на подобном промышленном оборудовании (большая печатная машина) я не смог перенести  ПО с родной CF - карты на другую, такого же размера но другой фирмы. Была также станочная оболочка под досом.  Образ я делал Нортон гостом, развернул его на другую CF-карту без проблем. Машина загрузилась нормально и работала ровно 2 дня, на неродной CF-карте,  потом зависла, и отказалась загружаться. Пришлось вызывать сервисника. От него мы узнали, что нельзя просто так взять и заменить карту  - носитель системного ПО, на другую. А полезли мы туда, так как руководство захотело печатать отчёты по работе машины. В станочном ПО такая функция была. Вот только принтер надо было купить у фирмы - производителя этой самой машины. В попытках заставить работать другой принтер мы редактировали файл  AUTOEXEС.BAT, на предмет загрузки драйвера принтера, ничего не получилось, зато перестали открываться некоторые страницы станочного ПО.  Образ у нас был давно снят, и мы развернули его на другую карту памяти. Родную карту я трогать не стал (как чувствовал, что нельзя ). Сервисник восстановил ПО с архивной дискеты на родную карту памяти, и всё заработало. Дискеты с архивами ПО шли вместе с документацией к машине.  Там были дискеты с Досом, станочной оболочкой, параметрами приводов, программой ПЛК. Он же и предупредил нас о предельно аккуратном обращении с родной картой памяти, и посоветовал немедленно сделать образы с архивных дискет, что мы сразу и проделали.. Вот такой сюрприз от машины эпохи Дос.
    • Борман
    • gudstartup
      а ведь все работало...
×
×
  • Создать...