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

Сделай свою работу в 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 эмодзи.

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

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

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

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

    • nahaus



  • Сообщения

    • AleXtM
      Добрый день, столкнулся с казалось бы тривиальной задачей - рассчитать требуемый момент электро-двигателя, но столкнулся с проблемой - масса "рычага". Знатоки, подскажите пожалуйста, как правильно посчитать требуемый момент двигателя? Описание применения(упрощено): двигатель жестко закреплен, на оси двигателя жестко закреплена вытянутая пластина 500мм длинной(вес пластины 300гр), перпендикулярно оси вращения, на пластину будет устанавливаться доп. вес(не важно что, главное весить будет примерно 150гр). При работе конструкции, пластина должна приводиться электро-мотором в движение - из горизонтального положения поворачиваться на 150 градусов и обратно(конструкция необходима для тестового стенда - симулирует открытие крышки). Как рассчитать необходимый момент двигателя(минимальный)? С учетом того, что рычаг(плечо) имеет вес. На прикрепленном скриншоте отобразил примерно внешний вид(упрощенно). 
    • Fedor
      Продать долг - обыкновенное дело тут никакого криминала. https://xn--c1abvl.xn--p1ai/pokupka_prodazha_dolgov/ Просто бизнес.  :)     
    • andrei4ik
      в настройках и так выключены все опции связанные с этим режимом в настройках и так выключены все опции связанные с этим режимом и главное я один раз нечаянно переключился на сокращенный режим, и с тех пор он в этом положении залип...может это какой то баг? и притом он и вот тут тоже залипает  
    • Ninja
      дааа, интересная могла ситуация выйти, мож тогда и судьба твоя по другому бы сложилась? Согласно теории хаоса который про бабочку... И не обсчитывал бы сегодня здания, а обсчитывал бы общак той банды! Упустил такие возможности Федя! И всё-таки у этих швейцарцев всё просчитано, и лючок тот тоже)) Всё продуманно, просто надо придерживаться их рекомендаций! А я так понимаю, что тот лючок ты просто заварил нафиг. И этот кран переживёт четыре поколения заводчан. И теперь время боится не только пирамид, но и твой кран..  
    • ak762
      я так понимаю подача в G93 пересчитывается из G94 т.е можно пересчитать в G93 и потом обратно в G94 в каждом кадре с интерполяцией плавного движения силами постпроцессора. то что осваиваете возможность станка это хорошо, но впечатление что детали вашего редуктора плоские и без поворотной оси их разместится больше чем с осью которая требует пространства на столе, всё это конечно ИМХО
    • Sabadash
      Уже работает тише) Но что конкретно изменяет стойка в процессе автонастройки сервы она конечно не показывает.    
    • Jesse
      @Orchestra2603 таки прилетела задача по оценке вибропрочности конструкции в частотной области на основе акселерограммы.. Т.е. помимо частотных характеристик входной нагрузки, мне надо правильно определить её амплитуду в частотной области. Акселерограмма априори нестационарная нагрузка, что подтверждает график сильно меняющегося среднеквадр. отклонения. Так что сразу рассматриваю только вторую половину -  более менее стационарную часть Строю дискретный Фурье-спектр в Вольфрам Математике ну типа получаю характерные частоты сейсмического воздействия до 30 Гц. Збс... Но вот с амплитудой непонятка. Мне вот это полученную амплитуду и задавать в программе расчёта прочности? Почему спрашиваю? - это ведь дискретное преобразование. И типа согласно равенству Парсеваля энергия сигнала сохраняется, да. Но всё зависит от числа отсчётов. Ну вот как простой пример: синусоидальный сигнал с частотой 50 Гц и амплитудой 1, длина сигнала 2 с.  В первом случае частота дискретизации 200, во втором - 1000. Ну то есть при одинаковой длине в 5 раз больше отсчётов во втором случае. А амплитуда в 3 раза больше... И где правильная амплитуда? Я конечно понимаю, что в моих присланных данных одно количество отсчётов и одна частота дискретизации.. Но как правильно делать то.?)
    • Buka_juve
      Здравствуйте!!!   Может кто-то сможет поделиться постпроцессором для стойки Fanuc 31i TD или Fanuc 0i-TD (XZC). Вообще интересует обработка фрезерованием шнеков с поворотом детали по оси C.   Станки Hyundai Wia L280LM или L150SY.   Спасибо
    • Sabadash
      Поправьте режим легкой сборки в настройках, включается с определенного количества деталей, просто увеличьте количество деталей или отключите этот режим. Быстрое переключение в дереве построения (Set resolved to lightweight)
    • mixey53rus
      Вот пример программы, которой сам пользуюсь O0001 ( T17 | M10 METCHIK | H17 ) N100 G21 N102 G0 G17 G40 G49 G80 G90 N104 T17 M6 ( T17 | M10 METCHIK | H17 ) N106 G0 G90 G54 X-.75 Y0. S100 M3 N108 G43 H17 Z5. N110 G94 N112 M29 N114 G98 G84 Z-10. R.5 F150. N116 G80 N118 G94 N120 M9 N122 G53 Z0 N124 G53 Y0 N126 M30
×
×
  • Создать...