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

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


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

19 часов назад, tompsongun сказал:

SaveAsCopyReplace 2.6

А он также быстро работает как и Rename part от Fox1001 в режиме переименования файлов из дерева? Просто руки пока не дошли проверить.

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


@none , не сравнивал. учитывая что в моем макросе (думаю, что уже можно и так сказать, от первоначального осталось процентов 5-10) надо жать кнопку подтверждения, вписать имя файла (запомненные крыжики и путь можно не учитывать), а в упомянутом специализированном макросе в общем тоже вписать имя файла, думаю, что макрос от Fox1001 быстрее, к то му же он специализирован под это - в коде нет лишних сравнений и чтения файлов настроек.

 

к тому же, мне кажется, что принципы реализации разные. как сделано в Rename part и partTreeRename - не знаю

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

 

в тех макросах модель-жертва явно не открывается, возможно скрыто (это тоже можно), далее как - ? для меня.

 

я не ставил себе целью конкурировать )). типа саморазвития - цель )) просто так получилось, что дополнительная мало кому нужная осуждаемая функция сохранения с новым именем и чертежом моделей надёрганных с других проектов (3-5, допустим) в папке нового проекта и так, чтобы каждое открытие не сбивало путь сохранения на другие проекты и ...  в конце концов замена привлечённой модели на копию необратимо привело к приобретению черт программ от глубокоуважаемых мной STREAMDIVISION и FOX1001, думаю в дальнейшем, возможно, приобретёт частично что-то и из MProp от не менее глубокоуважаемого мной LEON )).

 

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

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

Почему я спросил про скорость работы, потому что ранее были и другие макросы по переименованию, но сам процесс включал в себя перезагрузку всей сборки, и это сильно замедляло работу, когда сборки были большие. Потом появился макрос от Fox1001 который каким-то чудесным образом переименовывал без перезагрузки всей сборки, и тут все обрадовались. Но в нем не достает самой малости - обновить свойства. Поэтому я спросил про скорость. Спасибо за работу, будем использовать в любом случае!

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

@none нет, у меня сборка не перезагружается, но перестраивается (типа "светофор" нажали) - надо, чтобы при замене освободился файл - знаете, что если удалить файл или заменить в сборке, физически с диска вручную не удалить - файл занят солидом ещё, но такой проблемы не существует, если модель в сборке погасить то можно удалить с диска ручками и.. потом не высветить )).

 

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

версия 2.6.1

SaveAsCopyReplace.swp

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

упустил кой чего, прошу извинить

добавил внесение свойства Наименование_ФБ - используется в чертеже в основной надписи

и внесение данных наименования и бозначения на вкладку суммарная информация - как в МПроп.изображение.png

 

 

НО - для Наименование_ФБ, увы пока для одного размера шрифта <FONT size=4> " & Chr$(10) & "<FONT size=5> - он формируется в МПроп разбиением на строки, присвоением шрифта... вот скрин, для примера кода МПроп изображение.png 

поэтому я взял 1 общий вариант для не шибко длинных наименований (, в свой код добавил:

...

'вносим свойства на вкладку суммарной инфы

swModel.SummaryInfo(swSumInfoTitle) = Naimen
swModel.SummaryInfo(swSumInfoComment) = Obozn

'вносим свойства на вкладку настройки

...

swCustProp.Add3 "Наименование_ФБ", swCustomInfoText, "<FONT size=4> " & Chr$(10) & "<FONT size=5>" & Naimen, 1

 

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

Должен предупредить пользователей макроса SaveAsCopyReplace

 

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

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

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

 

как в этом? не достаточно обкатано и проверено... надеюсь, что таких проблем не будет :dntknw:

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

эх.. ещё одна обновка, так мысль пришла.

версия 2.6.2

опция для внесения в свойство "наименование_фб" переноса строки. указываете значение количества символов в 1 строке наименования основной надписи (по умолчанию принял 24 для шрифта гости тип а) и получится 2х строчная запись. значение 0 - отключает функцию, ну и неразумно большое число тоже даст результат )). число запоминается. при первом запуске - поле пустое, наверно, надо вписать что-то ;). и в справку добавил.

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

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

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

SaveAsCopyReplace.swp

 

вроде рекомендуется оба символа использовать Chr$(13) & Chr$(10) для ровного переноса строки. код:

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

' Наименование_ФБ
If OsnNadp1Stroka.Value = 0 Then GoTo 3
If Len(Naimen) > OsnNadp1Stroka.Value Then
NaimenFB = Left$(Naimen, OsnNadp1Stroka.Value)            'от длинного имени берём указанную длину слева
CharPos = InStrRev(NaimenFB, " ")   ' в ней от конца ищем первый пробел (ограничимся пока этим уж) - это номер позиции разделения на строки
NaimenFB2 = Right$(Naimen, Len(Naimen) - CharPos)   'остаток строки - 2я строка
NaimenFB = Left$(Naimen, CharPos) & Chr$(13) & Chr$(10) & NaimenFB2 ' отсекаем до пробела, вставляем символы переноса каретки _
                                                                                                 (alt+013) и перевода строки (alt+010) и присоединяем оставшееся, получили 2х строчную запись

End If

3:
ComboBoxINI.List(6) = OsnNadp1Stroka.Value

swCustProp.Add3 "Наименование_ФБ", swCustomInfoText, "<FONT size=4> " & Chr$(10) & "<FONT size=5>" & NaimenFB, 1

ну пока на радость всем угомонюсь ))  раб. неделя впереди. завал..

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

Попробовал у себя. Настройки изначально: SW2014

Выбираю компонент в сборке, запускаю макрос.

В ту же папку хочу копировать и заменить в сборке (переименование по сути). У меня нижнее подчеркивание разделитель Наименования и Обозначения. Соответсвенно выбираю свой разделитель из выпадающего списка. Нажимаю кнопку Сохранить копию. Получаю:

Run time error 438
Object doesn't support this property or method. Ошибка возникает в строке:

Ln 320, Col 42:
'если заменить все - ложь.

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

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

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

Полагаю, что проблема в старой версии библиотек солида.

Присоединяюсь. Проблема та же. sw2016 sp5

Дополню - если работать в режиме детали (создавать копию), то не вносятся св-ва "Наименования_ФБ". Точнее, вносится только "<FONT size=4> <FONT size=5>" и все, само наименование не копируется, хотя св-во "Наименование" заполняет правильно.

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

2.6.3 SaveAsCopyReplace

Наименование_ФБ  - ничего не поменялось.

Чуть поправил ваш код и стало добавлять:

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

изображение_2021-03-29_135608.png

Модель в сборке по-прежнему не меняет на вновь созданную - никаких ошибок не выскакивает.

sw2016 sp5

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

2.6.4  (+ изм. из 2.6.3)  переименование/замена в сборке работает в солидворкс >2017

- исправил вылет при копировании модели с чертежом, а чертежа таки нет.

- поправил положение меток-подписей.
- возможность открытия сокращённых моделей.

- правка в справке.

- ошибка внесения 'Наименование_ФБ',

- визульное отличие сообщений с чем будем работать,

- не работали кнопки 'нет' в начальном диалоге.

 

SaveAsCopyReplace.swp

 

@malvi.dp ,  да в коде не хватало условия - прошляпил я. сейчас домой пришёл. посмотрел изображение.png - верхнее выделенное - его не хватало - проверки, если двухстрочность не нужна, то присвоить наименование наименованиюФБ, иначе отредачить )). попутно еще ошибочек нашёл.

 

@none ,@malvi.dp  и те у кого solidworks ранее 2017 версии - увы по замене модели...:sad:  блин, печаль печальная.

даже пока особо не знаю как решить. надо подвникнуть. я сначала предположил, что файл остаётся занят солидом - не выгружается, и потому партТрееРинейм полностью перезагружает сборку. интересно а погасить-высветить даст ли заменить. но даже для этого надо солид ставить 2014 - я тут-то за день 2-3 версии по ошибкам выкладываю, а изучить/найти api под ранние версии.  эх. но буду искать решение. надеюсь форумчане помогут к тому же.

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

 

если перейти к справке по команде/функции, или как её там, swAssy.ReplaceComponents2

https://help.solidworks.com/2017/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iassemblydoc~replacecomponents2.html           изображение.png

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

функция замены - значит не будет работать (( - добавил в справку.    Придётся в декомпиляторе потрошить макрос от Fox1001 может удастся чего выудить.

Может кто кусочком кода подсобит как в версиях ранее 2017.

 

 

 

 

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

а вообще есть ли в этих версиях функция замены файла в сборке?

Замена файлов в сборке есть. И так рад быстрому копированию детали с чережом.

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

Может кто кусочком кода подсобит как в версиях ранее 2017.

Записал макрос при замене компонента в сборке sw2016, вдруг поможет

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

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.Extension.SelectByID2("Деталь33-1@Сборка1", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Деталь33-1@Сборка1", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.ReplaceComponents("C:\Desktop\test\44_Деталь33.SLDPRT", "", False, 0, True)
End Sub
 

 

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

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

 

тут по идее конструкцию Try...catch...end Try надо бы, но в vba это через on error goto   в чём я не разобрался пока.

 

попробуйте заменить в маросе код на этот:

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

 '----------------------------------------------------------------------------------------------------------------------------
 'замена в дереве на переименованную деталь
If ReplaceModel.Enabled = True And ReplaceModel.Value = True Then
     ComboBoxINI.List(3) = "True"  ' для сохранения в ини-файл
     Set swModel = swApp.ActiveDoc
     Set swAssy = swModel
     Set swSelMgr = swModel.SelectionManager
     Set swComp = swSelMgr.GetSelectedObjectsComponent4(1, -1)
     
On Error GoTo 5
                 If ReplaceAll.Enabled = True And ReplaceAll.Value = True Then       'если заменить все активно и правда
                 Status = swAssy.ReplaceComponents2(sFileNameNew, "", True, 0, True)
               ElseIf ReplaceAll.Value = False Then                                                                          'если заменить все - ложь
                   Status = swAssy.ReplaceComponents2(sFileNameNew, "", False, 0, True)
               End If
Exit Sub
5:
          
 'для версии солида ранее 2017
On Error Resume Next
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim myModelView As Object

Set Part = swApp.ActiveDoc
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.Extension.SelectByID2(sFileNameOld, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.ClearSelection2 True
                If ReplaceAll.Enabled = True And ReplaceAll.Value = True Then       'если заменить все активно и правда
                boolstatus = Part.Extension.SelectByID2(sFileNameOld, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
                boolstatus = Part.ReplaceComponents(sFileNameNew, "", False, 0, True)
                ElseIf ReplaceAll.Value = False Then                                                                          'если заменить все - ложь
                boolstatus = Part.Extension.SelectByID2(sFileNameOld, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)   ' надо ли менять на True  ?
                boolstatus = Part.ReplaceComponents(sFileNameNew, "", True, 0, True)
                End If


         swModel.EditRebuild3       'перестроить, чтобы выгрузить из солида заменённую модель, чтобы удалить её потом
               
ElseIf ReplaceModel.Value = False Then
                 ComboBoxINI.List(3) = "False"          ' для сохранения в ини-файл
End If
'----------------------------------------------------------------------------------------------------------------------

 

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

попробуйте заменить в маросе код на этот:

Новую деталь создает, но не заменяет и вываливает предупреждение:

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

ZZ.JPG

zz1.JPG

 

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

Всем Привет.

А существует ли макрос для открытия просто папки (ее место расположения)

Типа нажимаешь на кнопочку и открывается проводник

с местом расположения файлов, и запускаешь программку) ?

 

Держите, набросал для вас.

Сделал в форме пополняемого списка каталогов (можно добавлять и удалять любое количество путей). При первом запуске по подсказке просто добавить первый путь, потом будет вываливаться список.

Из списка выбираемый каталог открывается двойным кликом.

OpenFolder.zip

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

@malvi.dp , а такой вариант:

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

  'замена в дереве на переименованную деталь
If ReplaceModel.Enabled = True And ReplaceModel.Value = True Then
     ComboBoxINI.List(3) = "True"  ' для сохранения в ини-файл
     Set swModel = swApp.ActiveDoc
     Set swAssy = swModel
     Set swSelMgr = swModel.SelectionManager
     Set swComp = swSelMgr.GetSelectedObjectsComponent4(1, -1)
 
                If ReplaceAll.Enabled = True And ReplaceAll.Value = True Then       'если заменить все активно и правда
              '    Status = swAssy.ReplaceComponents2(sFileNameNew, "", True, 0, True)
                    Status = swAssy.ReplaceComponents(sFileNameNew, "", True, True)
       
                ElseIf ReplaceAll.Value = False Then                                                                          'если заменить все - ложь
               '     Status = swAssy.ReplaceComponents2(sFileNameNew, "", False, 0, True)
                      Status = swAssy.ReplaceComponents(sFileNameNew, "", False, True)
               End If
         swModel.EditRebuild3       'перестроить, чтобы выгрузить из солида заменённую модель, чтобы удалить её потом
               
ElseIf ReplaceModel.Value = False Then
                 ComboBoxINI.List(3) = "False"          ' для сохранения в ини-файл
End If

знак апострофа - комментирует строку. я закомментил Status = swAssy.ReplaceComponents2(sFileNameNew, "", True, 0, True)

и ввёл Status = swAssy.ReplaceComponents(sFileNameNew, "", True, True)

такая конструкция описана в справке и 2014 солида : http://help.solidworks.com/2014/english/api/sldworksapi/replace_component_example_vb.htm?verRedirect=1

в общем с ней отрабатывает и в 2020

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

SaveAsCopyReplace 2.6.5.zip

вроде удалось добиться переименования/замены в версиях солида ранее 2017 года

 

@none , подскажите, пожалуйста, как у вас отрабатывает макрос.

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

подскажите, пожалуйста, как у вас отрабатывает макрос.

В ближайшее время отпишу как посвободнее будет. Разбираясь в этой теме пришла мысль еще: нельзя ли присваивать свойства Обозначения и Наименования из нового имени файла еще и в файле чертежа автоматически? Это была бы вообще песня, потому что в основной надписи чертежа тоже необходимо сразу получить изменения по-хорошему. А так все-таки надо будет каждый раз запускать макрос Mprop из чертежа. Если этот момент реализовать, то нужно будет просто нажать обновить (q) и все, - чертеж тоже обновлен.

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

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

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

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

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

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

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

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

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

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

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




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