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

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


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

18 минут назад, Plumber сказал:

Здесь уже как-то возникал подобный вопрос, я правда не помню чем закончилось, помню только что основная масса населения задавала один и тот же вопрос - ЗАЧЕМ?

Если так сильно хочется макрос, то наверное можно его самому и написать при помощи встроенного инструмента "Макрос"

Clip096.png

Я не шибко разбираюсь в этом, но в течении пары секунд трудов макрос с горем пополам работал, правда там была загвоздка с опциями "Бесконечная длина" и "Справочная геометрия".

Может знатоки подскажут как это сделать

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

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


У меня получилось как-то так:

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
Dim skSegment As Object
Set skSegment = Part.SketchManager.CreateLine(0#, -500, 0#, 0#, 500, 0#)
Part.ClearSelection2 True
Set skSegment = Part.SketchManager.CreateLine(500, 0#, 0#, -500, 0#, 0#)
Part.ClearSelection2 True
End Sub

Рисует две перпендикулярные линии длиной 1000 м (больше всё равно не получится из-за ограничений SW), с пересечением в базовой точке. Осталось только как-то указать, что это вспомогательная геометрия.

Line Macro.swp

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

У меня получилось как-то так:


Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
Dim skSegment As Object
Set skSegment = Part.SketchManager.CreateLine(0#, -500, 0#, 0#, 500, 0#)
Part.ClearSelection2 True
Set skSegment = Part.SketchManager.CreateLine(500, 0#, 0#, -500, 0#, 0#)
Part.ClearSelection2 True
End Sub

Рисует две перпендикулярные линии длиной 1000 м (больше всё равно не получится из-за ограничений SW), с пересечением в базовой точке. Осталось только как-то указать, что это вспомогательная геометрия.

Line Macro.swp 32 \u043a\u0411 · 0 загрузок

Вот что рисует мне макрос полученный в режиме записи макроса (см вложение) , может быть у вас получится его подредактировать.
Как я делал. Сначала нарисовал две бесконечные вспомогательные линии, но макрос после этого рисует только две линии(типа буквы Г). Тогда я нарисовал четыре бесконечные линии и получил вот такой макрос (см вложение).Macro2.swp

Всё вопрос закрыт. Записанный макрос работает.

Всем большое спасибо!

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

... может быть у вас получится его подредактировать.

К великому моему сожалению, как я уже говорил выше, я в процедурах плохо разбираюсь :blush2: Но как мне кажется надо как-то указать что CreateLine не просто линия а вспомогательная линия

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

Да и не кромку надо выбирать, а точки экстремумы

У Татуревича есть пример на сайте (пока ещё не всё монетизирует)

https://www.codestack.net/solidworks-api/document/drawing/sheet-context-sketch/

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

 

6 часов назад, DuS сказал:

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

Держи. Если раскомментировать 2 строки, можно сначала выбрать плоскость и макрос создаст новый эскиз и построит прямые

Спойлер

Option Explicit
Dim swapp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swSketchMgr As SldWorks.SketchManager
Dim swSketchLine As SldWorks.SketchLine
Dim boolstatus As Boolean

Sub Main()
    Set swapp = Application.SldWorks
    Set swModel = swapp.ActiveDoc
    Set swModelDocExt = swModel.Extension
   ' boolstatus = swModel.Extension.SelectByID2("", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
    Set swSketchMgr = swModel.SketchManager
    'swSketchMgr.InsertSketch True
    Set swSketchLine = swSketchMgr.CreateCenterLine(0#, 0#, 0#, 1, 0#, 0#)
    boolstatus = swSketchLine.MakeInfinite
    swModel.SketchAddConstraints "sgFIXED"
    Set swSketchLine = swSketchMgr.CreateCenterLine(0#, 0#, 0#, 0#, 1, 0#)
    boolstatus = swSketchLine.MakeInfinite
    swModel.SketchAddConstraints "sgFIXED"
    swModel.SetPickMode
    swModel.ClearSelection2 True
End Sub

 

 

 

 

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

Но как мне кажется надо как-то указать что CreateLine не просто линия а вспомогательная линия

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

2 минуты назад, Kir95 сказал:

Держи.

Ого! Спасибо! Сейчас опробую.

7 минут назад, Kir95 сказал:

Держи.

Ого! Спасибо! Сейчас опробую.

 

Короче, все работает отлично! Спасибо!

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

Короче, все работает

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

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

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

А зачем ее убирать? Это как раз то что нужно.

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

А зачем ее убирать? Это как раз то что нужно.

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

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

А зачем ее убирать?

Я бы убрал бесконечность по причине того, что в SW существуют ограничения на размеры объектов в 1000000 мм (это не AutoCAD)

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

в SW существуют ограничения на размеры объектов в 1000000 мм

это для детали 1км, а в сборке ограничения в 100км (вдруг  кому мостик в 100км захочется спроектировать в солиде))

sketch_assy.jpg

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

... мостик в 100км

Тогда придется еще 4 клика сделать :biggrin:

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

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

Сейчас делаю так:

- вставляю все размеры в вид отмеченные для чертежа через swDraw.InsertModelAnnotations3

- вставляю все размеры через swDraw.AutoDimension

- сравнение значений размеров и удаление всех кроме двух максимальных (еще не сделал)

 

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

 

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

 

А почему бы не использовать функцию 3D-граничной рамки?

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

Я бы убрал бесконечность по причине того, что в SW существуют ограничения на размеры объектов в 1000000 мм (это не AutoCAD)

Извините, не понимаю чем плоха бесконечность. 

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

 

17 часов назад, Plumber сказал:

Рисует две перпендикулярные линии длиной 1000 м

 

А почему нельзя нарисовать короткий отрезок, а бесконечность задать галочкой бесконечности?

Цитата

    boolstatus = swSketchLine.Infinite

    Debug.Print "Infinite line: " & boolstatus

    boolstatus = swSketchLine.MakeInfinite

 

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

 

 

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

нарисовать короткий отрезок, а бесконечность задать галочкой бесконечности?

Я бы вообще такими глупостями не занимался - писать макрос на действия, которые занимают пару секунд :wink:

А за наводку на пример спасибо :good:

 

 

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

почему бы не использовать функцию 3D-граничной рамки?

Можно как-то в чертеже автоматом образмерить граничную рамку?

 

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

Можно как-то в чертеже автоматом образмерить граничную рамку?

В чертеже не знаю, но есть макрос который прописывает эти размеры в свойства. Может поможет чем.

Спойлер

'Определяем переменные
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swFeat As SldWorks.Feature
Dim swDeleteFaceFeature As SldWorks.DeleteFaceFeatureData
Dim swCustPropMgr As SldWorks.CustomPropertyManager
Dim names As Variant
Dim textexp As String
Dim evalval As String
Dim PartName1 As String
Dim swPart As Object

Dim featureName As String
Dim boolstatus As Boolean
Dim opt As Long

'Основная подпрограмма (точка входа)
Sub main()

    'Активируем основные переменные
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swModelDocExt = swModel.Extension
    
    
    ' Определяем самый первый элемент (фичерс) в дереве
    Set swFeat = swModel.FirstFeature
    
     'Пробегаем цыклом по дереву пока не закончатся все элементы (фичерсы)
     Do While Not swFeat Is Nothing
        
        If swFeat Is Nothing Then
            Exit Do
        End If
 
        'Записываем в переменную featureName имя текущего элемента (фичерса)
        featureName = swFeat.Name
        ' Присваиваем переменной swPart активный документ
        Set swPart = swApp.ActiveDoc
        'Получаем имя документа (файла)
        PartName1 = swPart.GetTitle
        'Выводим его для проверки
        'MsgBox PartName1
                    
        'Проверяем содержит ли имя файла расширение или нет (это зависит от настроек windows) если содержит, то убираем его
        PartName1 = Replace(PartName1, ".SLDPRT", "")
        PartName1 = Replace(PartName1, ".sldprt", "")
        'Выводим имя для проверки
        'MsgBox PartName1
        
        'Проверяем имя элемента (фичерса) и если оно совпадает с CutListFolder, то
        If swFeat.GetTypeName2 = "CutListFolder" Then
             
            boolstatus = swModelDocExt.SelectByID2(featureName, "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0)
            'Создаем 3D-граничную рамку
            swModelDocExt.Create3DBoundingBox
            'высвечиваем возможные погашенные элементы развертки листового металла
            UnsupresseFlatternFeatures.UnsupresseFlatternFeatures
            'Присваиваем переменной swCustPropMgr значение swFeat.CustomPropertyManager (активируем свойства элементов списка вырезов)
            Set swCustPropMgr = swFeat.CustomPropertyManager
            'Добавляем в список свойств вырезов свойство - Габарит детали ДхШхВ
            swCustPropMgr.Add3 "Габарит детали ДхШхВ", swCustomInfoType_e.swCustomInfoText, """SW-3D-Длина граничной рамки@@@" & swFeat.Name & "@" & PartName1 & ".SLDPRT""" & " x " & """SW-3D-Ширина граничной рамки@@@" & swFeat.Name & "@" & PartName1 & ".SLDPRT""" & " x " & """SW-3D-Высота граничной рамки@@@" & swFeat.Name & "@" & PartName1 & ".SLDPRT""", swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd
            'Добавляем в список свойств вырезов свойство - Развертка ДхШ
            swCustPropMgr.Add3 "Развертка ДхШ", swCustomInfoType_e.swCustomInfoText, """SW-Длина граничной рамки@@@" & swFeat.Name & "@" & PartName1 & ".SLDPRT""" & " x " & """SW-Ширина граничной рамки@@@" & swFeat.Name & "@" & PartName1 & ".SLDPRT""", swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd
        End If
    
        'Выводим значение имени элемента (фичерса) в окно Immediate
        Debug.Print swFeat.GetTypeName2
        'Переходим к следующему элементу
        Set swFeat = swFeat.GetNextFeature
    'Метка цикла
    Loop
    
    'Выводим сообщение
    MsgBox "В свойства списка вырезов добавлены свойства Габарит детали ДхШхВ и Развертка ДхШ!"

'Завершение подпрограммы
End Sub

 

Полный макрос здесь: AddGabaritProperty.swp

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

   Добрый день, эксперты и спецы. Хочу немного поделиться опытом и понабраться уму от грамотных умных конструкторов :)

Рисую в soliworks уже много лет. Недавно освоил catia и мне понравилось. Из явных плюсов catia для себя нашел следующий способ проектирования - 3 эскиза (3 основных вида) которые содержат все основные линии, профили и размеры и из этого эскиза уже делаю детали. То есть строю управляющую модель по аналогии с catia. Решил попробовать сделать нечто подобное в solidworks 2018.

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

   В итоге приспособил проекты solidworks под это проектирование, но есть неудобства, которые как решить я пока не додумался - 1) необходимый поиск по элементам эскиза - линиям, отверстиям, точкам и тд (иногда надо найти линию на которую ссылаются другие элементы внутри детали) - визуальный способ в sw предусмотрен (подсветка линий) но не всегда удобен, особенно при большом кол-ве элементов, хотелось бы иметь возможность находить по номеру элементов из мэнеджера или дерева построения или приближать к элементу экран как в catia, 2) тормознутость solidworks касательно больших эскизов - это уже оптимизация самой программы, тут можно решить видимо только гася элементы эскиза.

 

Кто нибудь так проектирует? Поделитесь опытом. Спасибо.

 

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

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

Может многократный запуск макросов в общем на что-то влиять?

Может там переполнение памяти идет или еще что?

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

макросы типовые, сохранение развертки, сохранение чертежа в джипег

 

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

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

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

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

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

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

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

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

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

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

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



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