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

Сделай свою работу в Solidworks эффективнее


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

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

Как можно к одному макросу добавить второй, чтоб запустить сразу оба макроса?

Либо использовать приложение от Артёма, которое называется Batch+

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

PS Хотя можно проще

1) Создаешь новый макрос:

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

изображение.png

Текст для копирования:

Dim swApp As SldWorks.SldWorks

Sub main()

 

    Set swApp = Application.SldWorks

 

    RunMacro1 'строка запускает выполнение первого макроса
    RunMacro2 'строка запускает выполнение второго макроса

End Sub

 

Sub RunMacro1()

   'Здесь код первого макроса, естественное без первой строки Sub main() и последней строки End Sub

End Sub

 

Sub RunMacro2()

   'Здесь код второго макроса, естественное без первой строки Sub main() и последней строки End Sub

End Sub

Пиши в личку, что конкретно надо сделать, попробуем реализовать :)

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


5 часов назад, Maik812 сказал:

Как можно к одному макросу добавить второй, чтоб запустить сразу оба макроса?

Сразу 2 не запустит (точнее варианты есть с запуском нескольких потоков при такой необходимости, если очень захотеть), а пару друг за другом можно из первого макроса вызвав второй:

http://help.solidworks.com/2010/english/api/sldworksapi/run_macro_vb.htm

https://help.solidworks.com/2018/english/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.ISldWorks~RunMacro2.html

Если макрос прикреплён к документу, то можно запустить и его:

http://help.solidworks.com/2010/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.ISldWorks~RunAttachedMacro.html

 

 

4 часа назад, Snake 60 сказал:

PS Хотя можно проще

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

 

4 часа назад, Snake 60 сказал:

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

Что мешает из под одного вызвать второй? а не городить третий.

 

Ссылка на сообщение
Поделиться на других сайтах
12 hours ago, Maik812 said:

запустить сразу оба макроса

@Maik812, ты свистеть умеешь? :biggrin: 

Quote

сразу два, да еще как свистну!

 

 

 

 

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

Что мешает из под одного вызвать второй? а не городить третий.

Ничего)

Есть еще варианты: Вариант 1 и Вариант 2

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

Немного автоматизации к предыдущему макросу внесения свойства формата.

Теперь не надо кликать мышкой и выбирать какой-либо вид на чертеже.Автоматически выбирается первый вид на листе.

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

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swSheet As SldWorks.Sheet
Dim swRefModel As SldWorks.ModelDoc2
Dim swCustProp As CustomPropertyManager
Dim swConfig As SldWorks.Configuration
Dim viewConfigName As String
Dim swSelMgr As SldWorks.SelectionMgr
Dim vSheetProps As Variant
Dim bRet As Boolean
Dim bool As Boolean
Dim Format As String
Dim nErr As Long, nWarn As Long
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    On Error GoTo Message
    
    Set swSelMgr = swModel.SelectionManager
    Set swDraw = swModel
    Set swSheet = swDraw.GetCurrentSheet
    vSheetProps = swSheet.GetProperties
    
    'swDwgPaperA0size 11
    'swDwgPaperA1size 10
    'swDwgPaperA2size 9
    'swDwgPaperA3size 8
    'swDwgPaperA4size 6
    'swDwgPaperA4sizeVertical 7
    
    Select Case vSheetProps(0)
    
        Case 6 Or 7
            Format = "А4"
        Case 8
            Format = "А3"
        Case 9
            Format = "А2"
        Case 10
            Format = "А1"
        Case 11
            Format = "А0"
        Case Else
            Format = ""
    End Select
    
Set swView = swDraw.GetFirstView 'получаем первый вид, но первый вид - это Лист
Set swView = swView.GetNextView 'переключаемся на следующий вид - это первый вид на листе

'делаем первый вид активным
boolstatus = swDraw.ActivateView(swView.GetName2)
'выбираем первый вид на чертеже (симуляция клика мышки)
boolstatus = swDraw.Extension.SelectByID2(swView.GetName2, "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0)
    
    Set swView = swSelMgr.GetSelectedObject6(1, -1)

    Set swRefModel = swView.ReferencedDocument
    
    Set swConfig = swRefModel.GetConfigurationByName(viewConfigName)
            viewConfigName = swView.ReferencedConfiguration
            
    Set swCustProp = swRefModel.Extension.CustomPropertyManager(viewConfigName)
        bool = swCustProp.Add3("Формат", swCustomInfoText, Format, 2)
        
    swModel.Save3 swSaveAsOptions_Silent, nErr, nWarn
    
    swApp.SendMsgToUser2 "Формат: " & Format & " добавлен как свойство в модель.", swMbInformation, swMbOk
        
    Exit Sub
Message:
    swApp.SendMsgToUser2 "Пожалуйста, откройте чертеж!", swMbWarning, swMbOk
End Sub

 

 

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

не надо кликать мышкой и выбирать какой-либо вид на чертеже

При таком раскладе, вроде и без селекшн менеджера работает, без вот этих строк

'делаем первый вид активным
boolstatus = swDraw.ActivateView(swView.GetName2)
'выбираем первый вид на чертеже (симуляция клика мышки)
boolstatus = swDraw.Extension.SelectByID2(swView.GetName2, "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0)
    
    Set swView = swSelMgr.GetSelectedObject6(1, -1)

 

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

Теперь не надо кликать мышкой и выбирать какой-либо вид на чертеже.Автоматически выбирается первый вид на листе.

Я вот не пойму а как вы формат по виду определяете я на А3 могу и 3 или 4 вида запихнуть детали.. как макрос понимает формат? Я бы понял если по размера или габаритам подобрать форматку  и то сомнительно я на глаз иногда подбираю масштаб вида.. А если есть шаблон рамки так просто в шаблоне прописать формат. Я правильно понял просто свойство в чертеже прописываете?

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

не пойму а как вы формат по виду определяете я на А3 могу и 3 или 4 вида запихнуть детали.. как макрос понимает формат?

Формат листа из шаблона основной надписи активного листа берётся, а по виду определяется модель, в которую передаётся значение (А2/А3..)  для свойства "Формат"

4 часа назад, Maik812 сказал:

просто свойство в чертеже прописываете?

Значение в свойство модели, а не чертежа прописывается

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

Насчет НАЛИЧИЯ ЧЕРТЕЖА. 
По итогу сформировал небольшой полуфабрикатный алгоритм действий который хорошо работает. 
Пару уточнений, из-за которых это вообще нужно: 
1) Много конфигураций детали, много листов в чертежном файле ко всем этим конфигурациям

2) Каждое новое изделие конструируется из подсборок предыдущих изтелий (т.е. изделия типовые и изменения небольшие)

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

 

1. Задать каждой детали "динамическое" свойство sw-configuration name.

2. Благодарю Kir95 за существование этого пункта. С помощью его макроса задать каждой детали "имя листа". При этом я называю чертежный лист в соответствии с именем конфигурации. Т.е. у детали с 2 конф. "-00" и "-01" есть файл чертежа с двумя листами "0" и "-1" (в следствии того, что спецификация в SW не сохраняет имя конфигурации в текстовом формате). Также работает, если на одном листе расположены 2 чертежных вида разных конфигураций. тогда лист необходимо назвать "0-1"
3. Выгружаем спецификацию в excel. Необходимые столбцы: "обозначение"(в моем случае это обозначение без конфигурации, нужно для удобства поиска детали в сборке в случае чего), "имя конфигурации" "имя листа". Остальные столбцы по желанию и для удобства фильтрования

4.1 Написал макрос на excel, для сравнения имени конфигурации с именем листа. Условно: ЕСЛИ "имя листа" содержит в себе "имя конфигурации", ТО совпадает, В ПРОТИВНОМ СЛУЧАЕ не совпадает.
Макрос для excel:

--------------------------

Dim startCell As Long
Dim lastRow As Long
Dim i As Long


Sub Proverka()
    
    Range("I1").Value = "Проверка"
 
startCell = 2
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    Cells(startCell, 9).FormulaLocal = "=ЕСЛИ(ЕЧИСЛО(ПОИСК($C2;$H2));""Совпадает"";""Не совпадает"")"
    Cells(startCell, 9).Select
    Selection.AutoFill Destination:=Range(Cells(startCell, 9), Cells(lastRow, 9)), Type:=xlFillDefault
         
    Cells(lastRow + 1, 9).Formula = "=TODAY()"

End Sub
--------------------------

 

В данном макросе необходимо поменять значение отвечающие за номера столбцов вышей спецификации

 

4.2. Запускаем данный макрос (можно забиндить на какое-либо сочетание клавиш)

5. Отфильтровать и вывести то, что "не сопадает". Это и будут детали, на которые нет чертежей, либо у которых ещё не прописано свойчтво "имя конфигурации"/"имя листа"

Еще примечания:
Данная идея основана на том, что при создании новой конфигурации копируются свойства той конфигурации, которая была активна в момент копирования. 

Т.е. при создании конфигурации "-02" скопируются два важных для нас свойства.  Это "динамическое" sw-configuration name, значение которого в любом случае будет "-02" и текстовое "-1" обозначающее имя листа на котором находится чертежный вид конфигурации, с которой было скопированно это свойство. В таком случае в строчке этой детали макрос экселя выдаст "не совпадает". Так и можно будет отследить новые детали на которые неоходимо выполнить чертеж
Большие минусы:

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

2. Пока что это не то, чего я хотел изначально (одна кнопочка, при нажатии котрой выдается список невыполненных чертежей), но тоже работает.
 

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

3. Выгружаем спецификацию в excel. Необходимые столбцы: "обозначение"(в моем случае это обозначение без конфигурации, нужно для удобства поиска детали в сборке в случае чего), "имя конфигурации" "имя листа". Остальные столбцы по желанию и для удобства фильтрования

4.1 Написал макрос на excel

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

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

@Kir95 По факту да, тоже будет работать. Но тогда придется работать с каждой деталью отдельно. В моем случае я работаю в спецификации сборки конструкции. Ведь главный вопрос "все ли чертежи имеются для всех деталей конструкции?" а не для конкретной детали

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

Теперь не надо кликать мышкой и выбирать какой-либо вид на чертеже.Автоматически выбирается первый вид на листе.

Вероятно правильным было бы выбирать не первый вид, а тот что в свойствах листа указан(Использовать значения, настроенные пользователем в модели, показанной в/Model in view specified in sheet properties), а то ведь первый вид может и пустым оказаться или не тем.

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

Пока что это не то, чего я хотел изначально (одна кнопочка, при нажатии котрой выдается список невыполненных чертежей), но тоже работает.

Может вот этот макрос будет полезен? https://www.codestack.net/solidworks-api/document/drawing/copy-drawing-paths/ 

Тут правда, наоборот, список выполненных чертежей, но как насчёт исполнений фиг знает.

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

Вероятно правильным было бы выбирать не первый вид, а тот что в свойствах листа указан(Использовать значения, настроенные пользователем в модели, показанной в/Model in view specified in sheet properties), а то ведь первый вид может и пустым оказаться или не тем.

Возможно Вы и правы, надо будет подумать над этим.

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

Вероятно правильным было бы выбирать не первый вид, а тот что в свойствах листа указан(Использовать значения, настроенные пользователем в модели, показанной в/Model in view specified in sheet properties), а то ведь первый вид может и пустым оказаться или не тем.

А какой это интерфейс смотреть не подскажите? Что-то у меня не ладится с поиском по АПИ :(

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

Тут правда, наоборот, список выполненных чертежей, но как насчёт исполнений фиг знает.

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

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

Сборка /деталь открывает чертеж  же,  знает этот путь?

Знает только, если чертёж в той же папке лежит, что и деталь/сборка. Если б всё так просто было, зачем тогда б все эти пдм'ы были. Ты ведь можешь на 1 деталь 10 чертежей нафигачить, даже с одинаковым с деталью именем, но хранить их в разных папках - какая программа в этом разберётся?

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

1 деталь 10 чертежей нафигачить, даже с одинаковым с деталью именем, но хранить их в разных папках - какая программа в этом разберётся?

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

Ну хорошо тогда в файле чертежа должна быть ? Он то откуда знает какой фаил?  Фаил чертежа же любое имя иметь может?

Твой макрос же делал подобно в проводнике в дискрипшен записывал.?

А ПДМ откуда знает че откуда и куда?

Только что, Maik812 сказал:

но хранить их в разных папках - какая программа в этом разберётся?

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

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

@Maik812 Пробуй:

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

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swSheet As SldWorks.Sheet
Dim swRefModel As SldWorks.ModelDoc2
Dim swCustProp As CustomPropertyManager
Dim swConfig As SldWorks.Configuration
Dim viewConfigName As String
Dim swSelMgr As SldWorks.SelectionMgr
Dim vSheetProps As Variant
Dim bRet As Boolean
Dim bool As Boolean
Dim DrawPath As String
Dim nErr As Long, nWarn As Long
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    On Error GoTo Message
    
    Set swSelMgr = swModel.SelectionManager
    Set swDraw = swModel
    Set swSheet = swDraw.GetCurrentSheet
    vSheetProps = swSheet.GetProperties
    DrawPath = swDraw.GetPathName
        
    Set swView = swDraw.GetFirstView 'получаем первый вид, но первый вид - это Лист
    Set swView = swView.GetNextView 'переключаемся на следующий вид - это первый вид на листе


    Set swRefModel = swView.ReferencedDocument
    
    Set swConfig = swRefModel.GetConfigurationByName(viewConfigName)
    
            viewConfigName = swView.ReferencedConfiguration
            
    Set swCustProp = swRefModel.Extension.CustomPropertyManager(viewConfigName)
    
        bool = swCustProp.Add3("Путь к чертежу", swCustomInfoText, DrawPath, 2)
        
    swModel.Save3 swSaveAsOptions_Silent, nErr, nWarn
    
    swApp.SendMsgToUser2 "Путь: " & DrawPath & " добавлен как свойство в модель.", swMbInformation, swMbOk
        
    Exit Sub
Message:
    swApp.SendMsgToUser2 "Пожалуйста, откройте чертеж!", swMbWarning, swMbOk
End Sub

 

 

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

Может вот этот макрос будет полезен?

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

 

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

AutoAlignComp

Макрос выравнивания компонента по исходным координатам
Только для сборки.
Если выбран только один компонент, макрос выровняет его по исходным координатам сборки.
Если выбрано два компонента - первый будет выровнен по второму, по принципу кликов мышкой "Этот - Сюда".
Если в выборе 1 есть компонент входящий в дочернюю сборку, дочерняя сборка целиком будет перемещена и не зафиксирована.
Если выбрана дочерняя сборка, она будет перемещена и зафиксирована (если раскомментирована фиксация в коде).
Фиксированные компоненты будут перемещены не смотря на фиксацию, фиксация сохраняется.
Компоненты с сопряжениями будут перемещены в соответствии со степенями свободы (ну, или покрасят дерево красным :) ).

 

Тестим?

AutoAlignComp.bmp AutoAlignComp.swp

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • eljer0n
      Большое спасибо! Посмотрю. Но, судя по всему, даже если удастся заставить его сохранять чертеж с трехзначным исполнением, видимо, в той же спецификации правильного отображения не добиться. У Леона с товарищем был об этом разговор, что солид вроде как не воспринимает исполнения дальше двузначного. Хотя, может и я неправильно понял. Вернусь к этому вопросу чуть позже. Еще раз спасибо за совет.
    • mrVladimir
      @gudstartup @Viktor2004 спасибо Вам за такое участие.  Я вот тоже в maintenance manual заглянул (наконец-то ). А вот фраза "при замене FROM/SRAM необходимо ..." (под пунктом 3 во вложении) не подразумевает, что появление ps5523 произойдет только если мы решим на нашей чпу поменять именно FROM/SRAM. А при замене других печатных плат (в том числе и материнской ) необходимо только как написано в пункте 2 восстановить данные памяти SRAM и, при необходимости, файлы пользователя. Нет?
    • maxx2000
      @davidovka это же очевидно. Вдруг нужного размера не окажется  как в анекдоте  
    • davidovka
      А для чего и сотни исполнений в таблице и гибкость одновременно?
    • ak762
      в СВ есть встроенный калькулятор для расчета балок при различных сценариях нагружения если ваш профиль монорельса совпадает с предопределенными профилями то можно прикинуть поведение монорелься без анализа на картинке 2 расчета двутавровой балки в качестве теста    
    • Viktor2004
      @mrVladimir не спешите отчаиваться. Вопрос спорный Я завел новую тему в которой мы это выясним  
    • Viktor2004
      Уважаемые специалисты. У кого был опыт замены фануковских плат? Именно на ЧПУ. Пожалуйста напишите какое ЧПУ и какую плату меняли И результат. Подошла или не подошла  
    • gudstartup
      @mrVladimir к сожалению с вашей платой все не так просто вам придется приобрести ее клон то есть она должна быть подготовлена продавцом и в нее должен быть записан серийный номер вашей старой платы он на штрихкоде а так готовить умеют не все или готовьтесь к сертификации опций также есть еще один аппаратный вариант но не каждый будет на новую плату м\сх перепаивать с риском превратить ее в кирпич.   если бы у вас был отдельный модуль процессора то вы бы просто переставили его в новую плату и все а с этой платой из-за ее не модульности намучаешься
    • SAPRonOff
      в окне состава изделия снять замочки у колонки позиция, тогда генератор колонки состава изделия не будет им присваивать свои значения автоматически, а запомнит то - что вы поставили или стояло до изменений проекта: 
    • Kelny
      Смотреть надо процедуру main, почти в самом конце: Слева от этих строк на сером поле ставите красные точки (клик мышкой) и запускаете макрос, когда макрос дойдёт до обозначенных строк можно будет наводить мышку на перменные, например, sPathName и смотреть значения, что бы определить где сбой: Для продолжения выполнения макроса нажимаем зелёный треугольничек (как кнопка Play).      
×
×
  • Создать...