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

Программирование для Solidworks - с чего начать?


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

Уважаемые профессионалы!

Использую эту САПР относительно недавно, года 2. В принципе, особых проблем, с использованием стандартных функций системы (в моделировании, построении сборок и КД) не испытываю, но есть огромное количество пожеланий к оной, которые, как я понял, кроме меня - вряд-ли кто будет исполнять. Соответственно, встал вопрос о программировании для этой сапр. Пытался разобраться с мануалом по Solidworks API, не помогло, сказывается нехватка знаний по программированию в VBA и, естессно, ангийского языка. С первым пунктом, в принципе, не очень сложно, есть умные книжки, и некоторый опыт программирования в Pascal, позже, в AutoLISP и Delphi. Признаюсь чесно, никогда крутым программером не был, но для автокада, ваял все что мне было нужно, правда, не использовал VBA, видимо, зря. Пытался записывать макросы, а потом разбираться в листингах - тоже, результаты - ниже среднего. Вопрос: Существуют-ли какие-нибудь русскоязычные материалы по этому вопросу? Возможно, кто-нибудь из вас сталкивался с подобной проблемой и нашел ее решение. В курсе, что официального русскоязычного описания API не было, потому и пристаю с глупыми вопросами к вам! Заранее благодарен всем, кто как-то отреагировал и, еще раз, прошу прощения, за глупые вопросы!

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


1) посмотреть здесь:

<noindex>http://www.pogruzka.com/julio/</noindex>

там есть полезные утилиты, некоторые с исходниками;

2) берем исходник и выполняем в пошаговом режиме (VB), смотрим что прога делает, как работают функци API и тд;

3) почти все действия, которые пользователь делает в SW записываются в файл "ХХХ:\Program Files\SolidWorks\swxJRNL.swj", можно посмотреть, изучить;

4) включить запись макросов SW при выполнении группы каких-либо действий - посмотреть, изучить в пошаговом режиме;

Вот, первое, что пришло в голову.

Удачи!

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

Вот спасибо, про лог - не знал, обязательно помотрю, потому как многое, из того, что доступно на сайте мне, пока, непонятно, либо, опять-таки, пока не нужно. Да и примеров там не так уж и много, по крайней мере, по моделированию параметрических моделей, с использованием VBA, я че-то не нашел, а до свойств файлов и конфигураций - пока далеко, тоже нужно, но для начала, нужно заставить его моделировать, а потом, согласно модели, выносить ее свойства. В любом случае, огромное спасибо! :clap_1:

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

Что-то не нашел я этого файла, только в Туторах валяется такой, и никакого отношения (оно и понятно) к тому что я делаю в солиде не имеет. :(

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

Что-то не нашел я этого файла, только в Туторах валяется такой, и никакого отношения (оно и понятно) к тому что я делаю в солиде не имеет. :(

<{POST_SNAPBACK}>

Какого файла?

Этого:

"ХХХ:\Program Files\SolidWorks\swxJRNL.swj" ?

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

Именно его... просмотрел настройки в солидворкс - нигде о нем ни слова не нашел. Может это в 2007 нормально?

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

Именно его... просмотрел настройки в солидворкс - нигде о нем ни слова не нашел. Может это в 2007 нормально?

<{POST_SNAPBACK}>

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

Может как-то по другому называется?

Если попробовать так: загрузить SW, сделать какую-либо операцию,

свернуть SW и сделать поиск последних файлов (я в TotalCommander`e это обычно делаю).

Вот для примера мой файл (я его сильно сократил, последний размер его - 380Кб):

"

' ******************************************************************************

' swxJRNL.swj - journal recorded on 01/06/07 by ssvadmin

' *****************************************************************************

Dim swApp As Object

Dim Part As Object

Dim SelMgr As Object

Dim boolstatus As Boolean

Dim longstatus As Long, longwarnings As Long

Dim Feature As Object

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.OpenDoc6 ("E:\ADOC_SSV\ADOC SW\Perpetum\Disk1_СБ.SLDASM", 2, 0, "", longstatus, longwarnings)

Set Part = swApp.ActivateDoc2 ("Disk1_СБ.SLDASM", False, longstatus)

swApp.ActiveDoc.ActiveView.FrameLeft = 0

swApp.ActiveDoc.ActiveView.FrameTop = 0

swApp.ActiveDoc.ActiveView.FrameState = 1

swApp.ActiveDoc.ActiveView.FrameState = 1

swApp.ActiveDoc.ActiveView.FrameState = 1

boolstatus = Part.Extension.SelectByID2("", "FACE", -0.02741962598139, 0.02299999999991, 0.004757867699027, False, 0, Nothing, 0)

Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("", "FACE", -0.03000295000368, 0.02299999999991, 0.000434542130165, False, 0, Nothing, 0)

Part.Save2 FALSE

Set Part = swApp.ActivateDoc2 ("Magn.SLDPRT", False, longstatus)

Part.Save2 FALSE

swApp.CloseAllDocuments True

swApp.ExitApp

End Sub

"

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

Этот файл может оказаться в папке рабочей.

Либо в Common Files.

Или C:\Documents and Settings\<USER>\Application Data\SolidWorks и т.д. Можно попробовать поиском.

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

Этот файл может оказаться в папке рабочей.

Либо в Common Files.

Или C:\Documents and Settings\<USER>\Application Data\SolidWorks и т.д. Можно попробовать поиском.

<{POST_SNAPBACK}>

Но он все-таки у всех существует?

Или я в чем-то ошибаюсь?

У меня лично он "всю жизнь" находился в папке "XXX:\Program Files\SolidWorks\swxJRNL.swj".

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

Существует.

Я думаю в разных версиях солида он в разных местах.

2005 у меня оставлял его в рабочей папке. Было удобно, т.к. для конкретных проектов свой файл был.

Сейчас в 2006 сп 4.1 у меня он находится в папке

C:\Documents and Settings\Peshkoff_VN\Application Data\SolidWorks

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

Да нет же, я ввобще, не только swxJRNL.swj, но и *.swj искал на всем диске, нашел тоько один, вышеупомянутый файл... :no:

О, нашел... C:\Documents and Settings\<Username>\Application Data\SolidWorks

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

Всем привет.

У меня в SW2007SP2 файл журнала СВ:

c:\Documents and Settings\XXXX\Application Data\SolidWorks\swxJRNL.swj

чуть-чууть опоздал... :-)

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

Чет я не пойму, как заставить скрипт проставить размеры на эскизе, не выводя ниалогового окна, тоест, не спрашивая пользователя... Суть в том, что основные, скажем, размеры, пользователь забивает в форме, а вот те, которые рассчитались самим скриптом?, тоесть, начертит он линию, скажем, уже по вбитому размеру, но, чтобы определить эскиз, нужно, чтобы он его еще и проставил. Получается только так: Он чертит линию, ставит размер и переспрашивает его в меню, чего мне не нужно. Согласен, чо нет проблем, заставить его, потом вбить нужный, но это не интересно. Нужно, чтобы он пользователя без нужды, не дергал...

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

Чет я не пойму, как заставить скрипт проставить ...

Хых...

никакой скрипт за тебя работать не будет, и никак его НЕ заставишь работать.

Работа скрипта - это прежде всего работа человека, который его(скрипт) создал.

Какая задача стоит перед тобой??

Сформулируй.

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

А вот попытаешься объяснить это другому человеку даже далекому от техники и, вдруг, самому становится все понятно!

Эт по-моему в психологии какое- то понятие есть. Я имею ввиду "вслух_произношение".

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

Короче: Я в открытом документе детали запускаю "запись". Далее, выбираю плоскость"Front", создаю в ней эскиз, в эскизе рисую прямоугольник, скажем, от точки "0", ставлю 2 размера, X и Y. Естественно солид меня спрашивает эти размеры. В полученом скрипте есть такаие строки:

boolstatus = Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", -0.01815158806545, 0.03563089509143, 0, False, 0, Nothing, 0)

Dim Annotation As Object

Set Annotation = Part.AddDimension2(-0.0350931, 0.029177, 0)

Part.ClearSelection2 True

Part.Parameter("D1@Эскиз1").SystemValue = 0.6

Тоесть, как я понял, он выбирает объект "Line2", далее, объявлеят переменную Annotation как Object и присваивает ей значение Part.AddDimension2(-0.0350931, 0.029177, 0), тобишь, высвечивает окошко для ввода размера, ну, с условиями размещения размерной линии и т.п. Далее, снимает выделение (как я и делал) и применяет размеру "D1@Эскиз1" значение 0.6, но уже не выводя окошко для ввода размера, хотя, когда я записывал, естественно оно тоже было. Нужно, чтобы программа с самого начала не просиля меня ввести значение размера (не показывала это окошко) а просто добавляла размер "D1@Эскиз1" к "Line2"с уще посчитанным, в ней-же, размером.

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

:rolleyes:

Посмотри настройки

Настройки > Параметры > Настройки пользователя > Общие > Ввести значение размера

и сниму галочку

В обычном (руками) работает

Скорее всего и в автоматическом (с помощью макроса) будет работать

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

Точняк! По умолчанию эта опция включена, но никто не мешает сделать так:

swApp.SetUserPreferenceToggle swInputDimValOnCreate, False

......

Образмерить......

......

swApp.SetUserPreferenceToggle swInputDimValOnCreate, True

Пасибо!

А можно (и так будет правильнее) вот так:

Sub main()

Dim DimValOn As Boolean 'объявляю переменную состояния этого параметра

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

Set SelMgr = Part.SelectionManager

DimValOn = swInputDimValOnCreate 'присваиваю ей текущее значение параметра

swApp.ActiveDoc.ActiveView.FrameState = 1

swApp.SetUserPreferenceToggle swInputDimValOnCreate, False 'выключаю параметр

boolstatus = Part.Extension.SelectByID2("Front", "PLANE", 0, 0, 0, False, 0, Nothing, 0)

Part.ClearSelection2 True

Part.SketchRectangle -0.01265105973025, -0.01736156069364, 0, 0.02476377649326, 0.04185616570328, 0, 1

Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", -0.01265105973025, 0.01978410404624, 0, False, 0, Nothing, 0)

Dim Annotation As Object

Set Annotation = Part.AddDimension2(-0.0218029, 0.0181691, 0)

Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0.005921772639692, 0.04158699421965, 0, False, 0, Nothing, 0)

Set Annotation = Part.AddDimension2(0.00619094, 0.052623, 0)

Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("D1@Эскиз1@Деталь1.SLDPRT", "DIMENSION", 0, 0, 0, False, 0, Nothing, 0)

Part.ClearSelection2 True

Part.SketchManager.InsertSketch True

swApp.SetUserPreferenceToggle swInputDimValOnCreate, DimValOn 'возвращаю значение параметра в исходное состояние

End Sub

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

Виноват, фигню спорол...

Для того, чтобы присвоить аеременной текущее значение флага "Ввести значение размера" нужно вот чего:

DimValOn=SldWorks.GetUserPreferenceToggle (swInputDimValOnCreate)

Естесственно, предварительно объявив переменную

DimValOn как Boolean....

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

Это конечно все клево, вот только у меня swApp.SetUserPreferenceToggle отказывался упорно работать.

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

Интересно получиться ли сейчас у тебя. Я работал в СВ2006 сп 0.0

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • mmaag
      Косвенно ограничивается максимальным передаточным отношением. Непосредственно - в расчёте. В разных каталогах называют по разному: "Wrap angle" или "arc of contact". Иногда ограничивают числом зубьев в обхвате.
    • Guhl
      Пиздишь, постоянно лезешь Вот ты хyйло лживое.  
    • lem_on
      Федора ответ )) даа, память 8 MB и то сыпется .  В отличие от тебя, я не лезу где не понимаю. 
    • Ahito
      Настроил уведомления в потоке работы через базу данных. Тестировал на своём ПК, всё работает идеально(поднял сервер PDM на своём ПК). Перенёс всё это на сервер, уведомления не работают. Может кто сталкивался и знает решения, подскажите, пожалуйста.  
    • Cas
      @roiman Ну Вы серьезно? Вы сомневаетесь, что производственник посмотрев на чертеж и не увидев параметры шестерни начнет делать и не спросит - где взять параметры зацепления? Или что? Разнервничается и не станет выполнять заказ - если заказ ему интересен? Проблема только в том, что фирма, в которой я работаю - не РЖД и не Газпром и нам нужно изготовить всего 50 комплектов деталей в год. А не 50 тысяч комплектов. Вначале и был чертеж с таблицей. Проблем сделать таблицу с греческими буковками - тоже никаких. Но я лично сказал ему убрать и сделать сноску в т.т. на таблицу из Компаса. Все эти гигантские проблемы моего конструктора, на которые мне ВСЕ наперебой начали справедливо указывать - решаются за 2-3 минуты разговора с производственником - если на производстве, хоть раз изготавливали подобные шестерни и точили оси. "Веселые картинки", как вы сказали - превратить в чертеж - дело 10 минут. Причем в эти 10 минут входит пробежка по оформительскому ГОСТу.  Единственное здесь дельное  предложение прозвучало от Вас - разделить вал шестерню. Т.к. кроме как с помощью электроэрозии - я нигде не найду производство в РФ, которое бы взялось за выполнение моего заказа (с учетом количества и бюджета) 
    • Guhl
    • Guhl
      А вот тут вы пишете следующее: "отключите линейку сделайте semiclosed loop и никакого дрожания не будет" то есть вы советуете отключить, а не включить  Похоже это не я не понимаю как это работает, а вы То вы пишите отключить для борьбы с вибрацией, то вы пишите включить для борьбы с вибрацией. Так включить или отключить? Обычно @gudstartup в таких случаях включает игнор и гордо удаляется работать   @lem_on Я вижу ты принял участие в этой дискуссии Скажи, пожалуйста, что имеет в виду @gudstartup - включить или отключить?   Поясняю, отключая линейку (канал), тем самым мы отключаем эту функцию, потому что эта функция работает только с двумя каналами
    • gudstartup
      @Viktor2004 какое отклонение не сможет компенсировать система? читайте тему мне работать надо
    • Guhl
      меня интересует ваша трактовка перевода
    • gudstartup
      я вам ее привел в теме вы не читаете
×
×
  • Создать...