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

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


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

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

путём изменения значения реестра

Откуда? Откуда вы берёте такие "советы" в интернетах? )))

Изменяя ключи реестра "SldWorks.Application" вы ломаете API вызовы для всех потенциально использующих эти API программ и макросов.

При единичной установке SW должна быть одна только запись "SldWorks.Application.XX" + непосредственно пустая (без цифр) "SldWorks.Application". Если у вас несколько различных записей с "SldWorks.Application.XX" это значит на компьютере регистрировалось несколько версий SW. И да, сервиспаки тоже могут добавлять такие записи.

А ошибка в макросе ТТ скорее всего связана с тем, что там нужно переподключить библиотеки с контролами виндовыми. Либо эти библиотеки установить в систему (было и такое)

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


уточню: после установки ещё одной версии SW макрос ТТ стал работать в этой новой версии, а в старой стал выдавать ошибку "429", изменяя значение в SldWorks.Application\CLSID получается переключать работу ТТ на нужную в данный момент версию SW (но только на одну). может можно сделать и проще, заставив работать ТТ в нескольких версиях SW на одном ПК без манипуляций с реестром?

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

уточню: после установки ещё одной версии SW макрос ТТ стал работать в этой новой версии, а в старой стал выдавать ошибку "429", изменяя значение в SldWorks.Application\CLSID получается переключать работу ТТ на нужную в данный момент версию SW

Пробовали не реестр менять, а макрос?

Например: set swApp = GetObject(, "Solidworks.Application.30") '30 для SW2022 и в этом случае должно работать только в этой версии

 

Для каждой версии сделать свой макрос.

 

Ещё возможно стоит глянуть это:

https://support.microsoft.com/ru-ru/topic/возникновение-ошибки-выполнения-429-при-автоматизации-приложений-microsoft-office-b6070e15-ea78-4349-2751-72bdb5f186f7

 

 

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

изменяя значение в SldWorks.Application\CLSID получается переключать работу ТТ

Разламывание реестра конкретно в вашем примере, это самый грязный пример который можно было вообще использовать. Вы почините свой ТТ, да. Но своим советом сломаете доброй сотне (а то и больше) пользователей половину их аддонов и макросов. Причём навсегда)) пока они не додумаются либо снести SW либо снести ветки SW в реестре. Вспомнить о том что когда-то поменял ID какой то там штуки в реестре вряд ли кто.

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

Ещё раз, подскажите где вы такой "совет" нашли?

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

как сделать сортировку наименований деталей в дереве сборки по алфавиту?

казалось бы, простой вопрос, но не смог найти нигде ответ, если не брать в расчёт макрос, который выдал мне ошибку user-defined type not defined на строке Sub AddComponent(ByRef components As Dictionary, comp As Component2)

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

 





Option Explicit

Dim swApp As Object
 
Sub Main()
    Dim currentDoc As ModelDoc2
    Dim selMgr As SelectionMgr
    Dim selCount As Integer
    Dim comp As Component2
    Dim i As Integer
    Dim components As Dictionary
    Dim feat As Feature
     
    Set swApp = Application.SldWorks
    Set currentDoc = swApp.ActiveDoc
    If Not currentDoc Is Nothing Then
        If currentDoc.GetType = swDocASSEMBLY Then
            Set components = New Dictionary
            Set feat = currentDoc.FirstFeature
            Do Until feat Is Nothing
                Select Case feat.GetTypeName
                    Case "Reference"
                        Set comp = feat.GetSpecificFeature2
                        If Not comp.GetModelDoc2 Is Nothing Then 'supressed ignored
                            AddComponent components, comp
                        End If
                    Case "FtrFolder"
                        ReorderComponents currentDoc, components
                        components.RemoveAll
                End Select
                Set feat = feat.GetNextFeature
            Loop
            ReorderComponents currentDoc, components
        End If
    End If
End Sub

Sub AddComponent(ByRef components As Dictionary, comp As Component2)
    Dim compName As String
    Dim posMinus As Integer
    Dim key As String
    Dim doc As ModelDoc2
    
    compName = comp.Name2
    posMinus = InStrRev(compName, "-")
    key = BaseFilename(comp.GetPathName) & "@" & comp.ReferencedConfiguration & "@" & Right(compName, Len(compName) - posMinus)
    components.Add key, comp
End Sub

Function BaseFilename(pathname As String) As String
    Dim posSep As Integer
    
    posSep = InStrRev(pathname, "\")
    BaseFilename = Right(pathname, Len(pathname) - posSep)
End Function

Function SortAsmAndParts(components As Dictionary) As String()
    Dim res() As String
    Dim assemblies() As String
    Dim parts() As String
    Dim asmCount As Integer
    Dim partCount As Integer
    Dim i As Variant
    Dim comp As Component2
    Dim doc As ModelDoc2
    Dim j As Integer
    
    ReDim res(components.Count)
    ReDim assemblies(components.Count)
    ReDim parts(components.Count)
    asmCount = -1
    partCount = -1
    For Each i In components.Keys
        Set comp = components(i)
        Set doc = comp.GetModelDoc2
        If doc.GetType = swDocASSEMBLY Then
            asmCount = asmCount + 1
            assemblies(asmCount) = i
        Else
            partCount = partCount + 1
            parts(partCount) = i
        End If
    Next
    j = -1
    If asmCount >= 0 Then
        ReDim Preserve assemblies(asmCount)
        SortArray assemblies
        For asmCount = LBound(assemblies) To UBound(assemblies)
            j = j + 1
            res(j) = assemblies(asmCount)
        Next
    End If
    If partCount >= 0 Then
        ReDim Preserve parts(partCount)
        SortArray parts
        For partCount = LBound(parts) To UBound(parts)
            j = j + 1
            res(j) = parts(partCount)
        Next
    End If
    SortAsmAndParts = res
End Function

Sub ReorderComponents(currentAsm As AssemblyDoc, components As Dictionary)
    Dim sortedKeys As Variant
    Dim i As Integer
    
    sortedKeys = SortAsmAndParts(components)
    For i = LBound(sortedKeys) + 1 To UBound(sortedKeys)
        currentAsm.ReorderComponents components(sortedKeys(i)), components(sortedKeys(i - 1)), swReorderComponents_After
    Next
End Sub

Sub SortArray(ByRef arr As Variant)
    QuickSort arr, LBound(arr), UBound(arr)
End Sub

Sub QuickSort(ByRef arr As Variant, lowerBound As Integer, upperBound As Integer)
    Dim pivot As Variant
    Dim low As Integer
    Dim high As Integer
    Dim tmp As Variant

    If upperBound <= lowerBound Then Exit Sub

    pivot = arr(lowerBound \ 2 + upperBound \ 2)
    low = lowerBound
    high = upperBound

    While low <= high
        While arr(low) < pivot And low < upperBound
            low = low + 1
        Wend
        While pivot < arr(high) And high > lowerBound
            high = high - 1
        Wend
        If low <= high Then
            tmp = arr(low)
            arr(low) = arr(high)
            arr(high) = tmp
            low = low + 1
            high = high - 1
        End If
    Wend

    QuickSort arr, lowerBound, high
    QuickSort arr, low, upperBound
End Sub

 


 

sort-components-master.zip

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

@Kethate В редакторе VBA зайдите Tools -> References и поставьте галку на следующей библиотеке:

image.png

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

как сделать сортировку наименований деталей в дереве сборки по алфавиту?

Как вариант не дерево сортировать, а воспользоваться инструментом Визуализация сборки:

Viz_Panel_No_Spectrum.gif

https://help.solidworks.com/2010/russian/SolidWorks/whatsnew/AllContent/SolidWorks/Core/Assemblies/wn_2010/wn_2010_Assembly_Visualization_HEADER.html?id=8a20405b80384fd6b99c3b87d3a2f7d7#Pg0

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

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

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

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

Первое сообщение тут:

https://cccp3d.ru/topic/6622-спецификация-для-sw-по-гост/

 

Ещё вариант тут:

https://kelnyproject.ucoz.ru/load/2-1-0-11

 

Или одно из последних сообщений с макросом тут:

https://cccp3d.ru/topic/100971-брасол-—-программа-для-оформления-чертежей-и-не-только/?do=getLastComment

 

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

Пробовал ставить макросы с первой ссылки на SW2022 SP4.0 - не заработали. Либо руки у меня не оттуда, либо не знаю что делать. Если есть какая-то инструкция, то покажите пожалуйста. Много веток облазил, но чувствую что трачу время бестолку, которого и так всегда не хватает. 

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

Пробовал ставить макросы с первой ссылки на SW2022 SP4.0 - не заработали.

Дык, макросы из набора 2017, а так же читать из корня архива файл справки/рекомендации SWPlus_v_2017_SP0.0.chm, в частности:

Цитата

Возможные проблемы

1.Если при первом запуске макросов в более новой версии SW возникает ошибка, нажмите кнопку Debug и перейдите в окно редактирования макроса. Остановите выполнение командой Run-Reset. Зайдите в меню Tools-References и проверьте подключенные библиотеки. Если есть библиотеки с пометкой Missing!, снимите с них флажки и найдите и подключите библиотеку с аналогичным названием. Нажмите OK, закройте окно редактирования макроса и снова запустите макрос.

...

Или тоже самое нагляднее тут:

https://kelnyproject.ucoz.ru/publ/1-1-0-1

 

Ссылка на сообщение
Поделиться на других сайтах
30.09.2022 в 13:00, jtok сказал:

Да, это гораздо лучше, спасибо, поправил.

Поправил код.

Fix: Если в пути сохранения есть пробелы, то файл PDF сохраняется нормально, но при утвердительном ответе на вопрос, "Открыть ли проводник для просмотра?" открывается не расположение чертежа, а корневая папка диска. Поправлено, параметр взят в кавычки

Нет предела совершенству.

SaveAsPDF.zip

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

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

Спасибо!

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

Ребята, существует ли макрос, который удаляет все привязки в сборке, а потом пересопрягает по главным плоскостям,

А зачем?

Можно просто зафиксировать все компоненты на своих местах (привязки при этом можно погасить).

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

Можно просто зафиксировать все компоненты на своих местах (привязки при этом можно погасить).

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

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

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

Если все компоненты зафиксированы, то просто расфиксировали, то чно нужно двигать, выбрали инструмент ПЕРЕМЕСТИТЬ/ВРАЩАТЬ КОМПОНЕНТ подвинули в нужное место путём смещения на нужное расстояние и снова зафиксировали - вообще ни какие привязки не нужны.

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

Привет чемпионы! поделитесь пожалуйста базой материалов для ГеОС бета 5.6 если кто то расширял "стандартный" список программы

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

Подобновил макрос SaveAsCopyReplace для переименования/копирования модели вместе с чертежом (пришлось повспоминать что где да как )) )
версия 3.2.6.2

SaveAsCopyReplace.swp

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

мелкие исправления текстовых ошибок.

 

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

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

Screenshot_1.jpgScreenshot_2.jpgScreenshot_3.jpg

 

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

Подобновил макрос SaveAsCopyReplace для переименования/копирования модели вместе с чертежом (пришлось повспоминать что где да как )) )
версия 3.2.6.2

SaveAsCopyReplace.swp 698 \u041a\u0431 · 2 скачивания

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

мелкие исправления текстовых ошибок.

 

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

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

Screenshot_1.jpgScreenshot_2.jpgScreenshot_3.jpg

 

Пару слов про этот макрос. Он прекрасен! Очень удобный, быстрый и безглючный. Все понятно и логично.  Работает надежнее чем сраный пак и гоу. Огромное спасибо!

ЗЫ обновление протестирую в ближайшее время.

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

Присоединяюсь к словам @DuS

Пользуюсь на постоянной основе!

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

По схеме, допустим: АБВГ.000.000_Имя сборки, а входящие в нее детали: АБВГ.000.000.001_Имя детали 1; АБВГ.000.000.002_Имя детали 2 и т.д.

А так @tompsongun огромное спасибо за твой макрос.

 

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

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

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

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

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

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

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

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

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

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

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




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