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

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

В 28.01.2019 в 21:07, alek77 сказал:

Прошу подсказать:

Записываю свойства пользователя компонента макросом, после записи они не отображаются в таббилдере, пока не откроешь вкладку свойства пользователя, где все вновь записанные свойства отображаются сразу, и не закроешь её. Или можно перечертить пару раз, плюс глубокое перестроение и сохранение. Только после такого подшаманивания, новые значения свойств начинают отображаться в таббилдере. В конце макроса перечерчивание, перестроение и сохранение есть. Значения в системе прописываются, только в таббилдере не отображаются сразу, поля остаются не заполненными, и если в таббилдере нажать применить, благополучно стираются из системы. Надоело после работы макроса открывать свойства пользователя. Думаю, что это чистейший баг таббилдера. Как решить? 

 

 

В 31.01.2019 в 12:13, alek77 сказал:

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

Они начинают корректно отображаться только после нажатия кнопки ОК окошка суммарная информация

 

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

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

нужно в конце работы макроса добавить строку FileReload ко всем сохранениям и перечерчиваниям

 

В C# завершение кода теперь у меня выглядит так:

            swApp.Visible = true;
            swModel.ShowNamedView2("*Триметрия", 8);
            swModel.ViewZoomtofit2();
            swModel.EditRebuild3(); //Перестраивает только те функции, которые необходимо перестроить в активной конфигурации в модели (перечерчивание)
            swModel.Rebuild((int)swRebuildOptions_e.swForceRebuildAll);
            swModel.ForceRebuild3(true); //Принудительно перестраивает все функции активной конфигурации в модели (глубокое перестроение)
            swModel.Save();

            swModel.FileReload();//перезагрузка модели

            Debug.Print("Выполнено");

Наворотил конечно, перестраиваю всё и вся, но зато работает корректно.

FileReload выполняется без каких-либо манипуляций заметных глазу

 

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


Доброго времени суток Уважаемые форумчане
Возможно кто-то может поделиться макросом для хранения спецификации в файл экселя, поскольку штатный способ хранения в формате экселя то срабатывает не всегда.
Наткнулся на форуме файл макроса господина v-david только этот макрос также отказывается работать.

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

Сложно ответить почему у вас не работает мой макрос. Из технических возможны 2 причины, первая это несоответствие 32- и 64-разрядных оболочек (для 64 перевыкладываю) и вторая - наличие ошибок в модели (красное). Причину почему из-за "красного" он не работает не выяснял.

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

BOM to EXCEL.rar

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

Возможно кто-то может поделиться макросом для хранения спецификации в файл экселя

Попробуйте такой вариант - немного из справки солида и много кода из макроса одного автора, там в шапке записано.

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

В коде путь для сохранения и наименование файла можно переписать, при желании.

 

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

'SOLIDWORKS API Help
'Save Table to Microsoft Excel Example (VBA)
'This example shows how to save a BOM table annotation to a Microsoft Excel document.
'+
' Author: Luke Malpass
' Website: http://www.angelsix.com
' Date: 01/04/08
'
' Prerequisits: Have a drawing open, and for it to export anything, have at least one table created (such as a BOM)
'
'
'---------------------------------------------------------------------------
' Preconditions:
' 1. Open a drawing of an assembly with a BOM.
' 2. Click the move-table icon in the upper-left corner
'    of the BOM table to open the table's PropertyManager page.
'
' Postconditions: Saves the selected BOM to c:\temp\BOMTable.xls.
'--------------------------------------------------------------------------
Dim swApp As SldWorks.SldWorks
Dim swModDoc As SldWorks.IModelDoc2
Dim swTable As SldWorks.ITableAnnotation
Dim Status  As Boolean

Option Explicit

Public Sub Main()
    Set swApp = Application.SldWorks

    Set swModDoc = swApp.ActiveDoc
    Dim swSM As ISelectionMgr
    Set swSM = swModDoc.SelectionManager
    Set swTable = swSM.GetSelectedObject6(1, -1)
    swModDoc.ClearSelection2 (True)

    Dim swSpecTable As IBomTableAnnotation
    Set swSpecTable = swTable
    
    Dim swAnn                   As SldWorks.Annotation
    Dim nNumCol                 As Long
    Dim nNumRow                 As Long
    Dim sRowStr                 As String
    Dim i                       As Long
    Dim j                       As Long
    
    Dim objExcelObject          As Excel.Application
    Dim objBook1                As Excel.Workbook
    Dim objSheet1               As Excel.Worksheet
    
    Set objExcelObject = CreateObject("Excel.Application")
    objExcelObject.Visible = False
    objExcelObject.ScreenUpdating = False
    objExcelObject.Interactive = False
    
    Set objBook1 = objExcelObject.Workbooks.Add()
    Set objSheet1 = objBook1.ActiveSheet
        
    Set swAnn = swTable.GetAnnotation
    
    'путь для сохранения
    objBook1.SaveAs "C:\Temp\" & swAnn.GetName

    objSheet1.Activate

    'Set worksheet name
    objSheet1.Name = "BOM"


    nNumCol = swTable.ColumnCount
    nNumRow = swTable.RowCount

    ' Only export Bills of Materials (EDIT, OR REMOVE TO PROCESS ALL TABLES)
    If swTable.Type <> SwConst.swTableAnnotationType_e.swTableAnnotation_BillOfMaterials Then Exit Sub
    
    ' Get the table contents
    For i = 0 To nNumRow - 1
        For j = 0 To nNumCol - 1
            objSheet1.Range("A1").Offset(i, j).Value = swTable.DisplayedText(i, j)
            ' Bold top column
            If i = 0 Then objSheet1.Range("A1").Offset(i, j).Font.Bold = True
        Next j
    Next i
        
    objSheet1.Range("A1").Activate
    objSheet1.Range("A1", objSheet1.Range("A1").SpecialCells(xlCellTypeLastCell)).Columns.AutoFit
        
    ' Clean-up
    objExcelObject.ScreenUpdating = True
    objExcelObject.Interactive = True
    
    objExcelObject.ActiveWorkbook.Save
    objExcelObject.Workbooks.Close
    objExcelObject.Quit
    
    Set objSheet1 = Nothing
    Set objBook1 = Nothing
    Set objExcelObject = Nothing

    ' Save the selected BOM table to Microsoft Excel, including hidden cells
    ' and images
'    Status = swSpecTable.SaveAsExcel("c:\temp\BOMTable.xls", False, False)

End Sub

 

 

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

Прошу помощи... Как в макросе VBA после преобразования объекта (кромки) в чертеже определить, что полученный сегмент окружность? И как этот сегмент выделить для дальнейшей обработки в коде?

boolstatus = Part.SketchManager.SketchUseEdge3(False, True)

 

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

Кто нибудь программировал в SW PDM 2018? Есть задача вытащить все dxf файлы листовых деталей сборки из разных папок хранилища (DXF хранится  рядом с деталями) и поместить в "общей" копией в целевую папку этого же хранилища. Сколько смотрел справку по API SW не смог найти упоминания о команде позволяющей создать "общую" копию.... Никто не сталкивался?

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

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

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

Всем привет!

Может кому будет полезно и не придется потом править уже написанные макросы, а тем кто уже знает - напомнит!

На основе полученного опыта, хочу поделиться следующей информацией:

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

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

и метод swModel.GetTitle возвращает наименование файла с расширением или без него. Чтобы макрос работал на любых компах одинаково, предпочтительно

имя файла вытаскивать из полного пути файла используя метод swModel.GetPathName, тогда макрос не будет зависим от настроек винды. Приведу простой пример:

 

Показать содержимое  

Option Explicit
 
Global swApp            As ISldWorks
Global swModel          As IModelDoc2
 
Global TempString       As String
Global sFullFilePath    As String
Global sFilePath        As String
Global sFileExt         As String
Global sFileName        As String
Global CharPos          As Long


Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc

 Select Case swModel.GetType
        Case swDocPART
            sFileExt = ".SLDPRT"
        Case swDocASSEMBLY
            sFileExt = ".SLDASM"
        Case Else
            MsgBox "Только для деталей и сборок!"
            End
    End Select

GetFilePathAndName swModel.GetPathName

sFullFilePath = sFilePath & sFileName & sFileExt

Debug.Print "Путь файла - "; sFilePath
Debug.Print "Имя файла - "; sFileName
Debug.Print "Расширение файла - "; sFileExt
Debug.Print
Debug.Print "Полный путь и наименование файла - "; sFullFilePath

End Sub

Function GetFilePathAndName(TempString)

    If TempString = "" Then
        MsgBox "Компонент не сохранен!"
        End
    End If

    CharPos = InStrRev(TempString, "\")
    sFilePath = Left$(TempString, CharPos)
    sFileName = Right$(TempString, (Len(TempString) - CharPos))
    sFileName = Left$(sFileName, Len(sFileName) - 7)
End Function

Hide  

А сам сижу и правлю, жалею, что сразу не знал про такие подводные камни, зависящие от настроек винды.

В приложенном макросе этот же кусок кода

 

 

 

Macro1.swp

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

А сам сижу и правлю, жалею, что сразу не знал про такие подводные камни, зависящие от настроек винды.

В приложенном макросе этот же кусок кода

Почему нельзя использовать функцию Replace? Тогда расширение будет удаляться только когда оно есть.

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

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

Почему нельзя использовать функцию Replace? Тогда расширение будет удаляться только когда оно есть.

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

Согласен, тоже отличный вариант

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

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

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

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

 

Ссылка на сообщение
Поделиться на других сайтах
В 30.08.2019 в 09:51, alek77 сказал:

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

У Артёма Татуревича на сайте пример есть, посмотри

https://www.codestack.net/solidworks-api/document/suspend-graphics-update/

Скрытый текст
'**********************
'Copyright(C) 2019 www.codestack.net
'Reference: https://www.codestack.net/solidworks-api/document/suspend-graphics-update/
'License: https://www.codestack.net/LICENSE.md
'**********************
Sub SuppressUpdates(model As SldWorks.ModelDoc2, suppress As Boolean)
   
    Dim enable As Boolean
    enable = Not suppress
   
    Dim swView As SldWorks.ModelView
    Set swView = model.ActiveView
   
    swView.EnableGraphicsUpdate = enable
   
    model.FeatureManager.EnableFeatureTree = enable
    model.FeatureManager.EnableFeatureTreeWindow = enable
       
    swApp.DocumentVisible enable, swDocumentTypes_e.swDocPART
    swApp.DocumentVisible enable, swDocumentTypes_e.swDocASSEMBLY
    swApp.DocumentVisible enable, swDocumentTypes_e.swDocDRAWING
   
End Sub

 

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

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

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

Связь ведь между чертежом и моделью есть, и не зависит она от имен файлов. У чертежа и модели могут быть разные имена файлов, но они будут прекрасно открывать друг друга по ссылкам. Но если я переименую совершенно другую модель по имени чертежа, солид будет ругаться, что модель не та. Соответственно, у модели есть внутренний идентификатор, по которому чертеж понимает, тот файл ему подсунули или нет. Как выйти на этот идентификатор, где он находится, что это и с чем его есть? Можно ли с ним работать через API?

Спасибо!

 

 

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

у модели есть внутренний идентификатор, по которому чертеж понимает, тот файл ему подсунули или нет. Как выйти на этот идентификатор

"SW не делает эти данные общедоступными, очевидно, потому что это было бы слишком удобно для программистов, которым нужна эта информация" ( Гуглоперевод )))

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

https://forum.solidworks.com/thread/11814

 

У автора поста есть и прога соответствующая, но "за древностию лет", скорее всего нерабочая (

http://esoxrepublic.com/freeware/WhereUsed.php

 

 

 

 

 

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

Связь ведь между чертежом и моделью есть, и не зависит она от имен файлов.

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

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

15 часов назад, alek77 сказал:

чертеж почти утерян, так как следов нет.

Откройте в этом случае документ в  режиме только просмотра и/или через eDrawings - это возможно позволить хотя бы посмотреть, что было в документе, что бы поискать потом что-то похожее в моделях.

15 часов назад, alek77 сказал:

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

Как ни крути, что бы его получить простыми средствами АПИ нужно открыть файл и это происходит не быстро, а при обилии файлов это бесперспективно.

 

15 часов назад, alek77 сказал:

Можно ли с ним работать через API?

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

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

Уважаемые форумчане!

Подскажите кто-нибудь сталкивался с макросом, который создаёт лог всех сохраненных файлов в SW? В логе дата время и название сохраненного файла.

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

Подскажите кто-нибудь сталкивался с макросом, который создаёт лог всех сохраненных файлов в SW? В логе дата время и название сохраненного файла.

Теоретически возможно, через EVENTS с отслеживанием события сохранения. Но какой практический смысл от это информации? Ведь после сохранения файл может быть удалён/перенесён/переименован...

 

 

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

@Kelny Мне это необходимо для анализа рабочего времени затраченного на каждый проект. Лог я умею обрабатывать.

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

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

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

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

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

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

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

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

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

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

    • Vosem



  • Сообщения

    • ik_
      Здравствуйте! Довольно часто после нескольких проверок проекта перед сдачей в нем всем равно остаются глупые ошибки. Я думаю, можно было бы создать макрос, который мог бы проверять часто повторяющиеся ошибки, особенно которые трудно проверять человеку (много элементов для проверки). Он мог бы применяться следующим образом: выбирается папка с файлами, и после этого каждая деталь открывается и проверяется. В конце создается файл с перечислением чертежей и ошибок в них вида: "в детали АБВ10.10.011 скорей всего не стоят габаритные размеры" Тема создана, чтобы пофантазировать, какие ошибки можно было бы так проверять и каким способом это можно сделать. Я пока придумал пару проверок: 1. Самое простое. Проверить Наименование видов разрезов и баз, правильность порядка и нет ли неиспользуемых 2. Проверить все ли базы используются. При редактировании большого чертежа часто приходится поменять базы и соответственно обозначения допусков. Часто в таких случаях можно запутаться в базах, какую то базу оставить, без ссылающихся на нее допусков (ну у меня такое бывало) 3. Есть ли габаритные размеры. Тут возможно применять Bounding Box - узнавать габариты и узнавать есть ли такие размеры на чертеже. 4. Все ли нужные размеры стоят. Тут скорей всего реализовать очень сложно. В голову приходит только сравнивать количество размеров в модели и на чертеже (при этом не учитывать фаски там и все такое) 5. Проверять висячие размеры и элементы (желто-зеленые на чертеже) 6. На всех ли размерах с допуском стоит шероховатость   Делать пока ничего с этим не планирую, думаю стоит ли этим заниматься.
    • TVM
      Проблема в общей сборке. :( Дали ТЗ организаторам паралельной ветки. Очень долго репу чешут. Возможно нет ресурсов. Подозреваю будет все в ручном режиме.   Все "N" в стандартную BOM вывел (заголовок таблицы воспринимает свойсво головной сборки). Как теперь правильно все перемножить. P.S. Ветка в Все Вопросы о CAD.
    • Snake 60
      Тогда посмотрите вот этот макрос: https://snake-60.ru/blog/blog-list/84-onepage-blog/82-vba-makros-kombajn-po-chteniyu-i-paketnomu-zaneseniyu-svojstv-v-detali-i-sborki-solidworks Всегда можно доработать если есть четкое ТЗ.
    • pugach
    • Модернизация станков
    • Jesse
      по идее наоборот: когда тело контачит с жёстким телом, то его частота завышается.. Если свободно болтается, то частота ниже должна быть..)) Ну т.е. как обычно рассуждаем в МКЭ: больше суммарная жёсткость модели - больше частота    вот тут всё же кажется, что если мы посчитаем transient с нелинейностью а потом возьмём FFT с графика амплитуды, то это уже халтура будет)) Ну т.е. когда мы считаем модальник обычный, то это линейный идеализированный случай, когда мы пренебрегли всеми возможными нелинейностями. Иначе говоря, малая нелинейность которая присутствует всегда и везде сделает колебания лишь слегка ангармоничными (очень слабые отклонения от чистой синусоиды при измерении колебаний в точке)..  А в трензиенте с физической или другой существенной нелинейностью уже сам физический смысл частоты пропадёт имхо. Да и форму колебаний мы не можем знать в данном случае. Только лишь эту условную цифру - частоту..
    • TVM
      Спасибо. Ознакомился. Судя по столбцу связи в свойствах, зто более старшая версия чем SW16 и макрос вероятно не будет работать. Так же нет задания кол-ва головной сборки и получения результата.   Задача похожа на планирование производства. Где всем элементам допустим присвоено свойство "N". Как в столбце, допустим через формулу, получить кол-во деталей? Стандартная таблица BOM SW.  
    • Модернизация станков
      Латр 1М на 9 Ампер с сервоприводом РД 09 СССР. 2 шестеренки, концевики, ножки, стойки. Управление 2-мя кнопками Плюс и Минус. 3 проводка: один "0" и два фазных на "+" и "-" Стоят концевые контакты кнопки, разъемы. Все по уму, промышленное. НЕ САМОДЕЛ. 1983 год выпуска. Отличное состояние. Все просмотрено, некоторые винты/ болты заменены на новые. ЛАТР с ..... дистанционным управлением, кибернетический. Реостат. Да, такое тоже было в Союзе в промышленном оборудовании. Крутить рукой - не везде можно и удобно. Удаленное регулирование напряжения. Плавное. Можно по Интернету... Дам гарантию. Для стабилизаторов напряжения не подойдет. Медленно двигается "ручка". ОДИН ОБОРОТ ДЕЛАЕТСЯ ЗА 50 СЕКУНД. От минимума до максимума. Кто хочет побыстрее - надо поменять РД 09 на более скоростной. Сейчас стоит 1,75 об/мин. Самый медленный. Питание для управления ~ 220 В. Концевые контакты - кнопки МП 110 - не дадут выйти за пределы регулировки. Размеры : Диаметр 16 см Высота 29 см По мощности ЛАТРа - написано до 9 Ампер. НО желательно использовать на мощности 1 кВт или 5 Ампер. Чтобы был запас по мощности. Чтобы катушка не перегревалась. Провода заменены на гибкие. Схемы и распиновки разъемов дам. Продается только весь узел в сборе. Пультик с кнопками и видео работы будет. Пультик идет как тестовый. Расскажу все про него и как подключать. Любые доделки и доработки по Вашему требованию. Можно установить вольтметр, кнопки красивые, пульт, корпус, кожух и пр. Отправлю в регионы. Качественную упаковку гарантирую. 10,000 Р Торг уместен. // Лабораторный регулятор автотрансформатор напряжения с сервоприводом и электронным управлением Возможно для курсовых работ в институт, для лабораторного практикума и работ по физике, химии //
    • pugach
      Если тело при колебаниях задевает другое тело (берем пример с картинки), значит оно "хочет" колебаться с большей амплитудой и меньшей частотой. И когда контакт пропадет оно должно колебаться со своей собственной 1 частотой, или я не прав? Не знаю, может, отдельную тему про это задать. Я намучился с заданием "стандартного" демпфирования в workbench. Тестил на колебаниях заделанного стержня. Пробовал считать альфа и бетта, но в результате получал значительно большее затухание - логарифмический декремент колебаний ~0,35 вместо 0,12. Может это быть из-за того, что при моих условиях в стержне были небольшие (до 1 МПа) напряжения? Ведь НП-031 предлагает следующую таблицу, получается стандартные 2% относятся к стандартным условиям по нагрузкам на конструкцию?
    • mannul
      Смотря что вы подразумеваете под черновой обработкой. Выборку эквидистантным смещением от заготовки к модели? Конечно нельзя. Потому что программа рассчитывает выборку используя направляющие кривые на модели, проецируя их вдоль оси Z на модель. Для импеллеров и лопаток есть свои траектории.
×
×
  • Создать...