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

Программирование на VB под SolidWork


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

Макросы на VB не пишутся, они делаются на VBA.

Да пока написанные макроса, не записанные а именно написанные, в 2007 SW были без проблем запущенны на 2009 SW

А народ в темах про API документацию выкладывал - смотрели?

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


Да пока написанные макроса, не записанные а именно написанные, в 2007 SW были без проблем запущенны на 2009 SW

...

Это до поры, до времени.

И говорит это о том, что в этих макросах больше используется функционал чистого языка Basic, чем функционал API SW.

Ну как могут серьезные макросы написанные в SW2007, работать в SW2009 если в API SW2009 довольно большое количество специализированных функций убрали или заменили или изменили...?

...Цитата(ssv22 @ Nov 17 2009, 16:53)

А народ в темах про API документацию выкладывал - смотрели?

Что за темы в разделе по SW открыты?

Error! Цитата неверная: это не мои слова, а `MFS`, сообщение #5.

А темы: "Макросы и проги для SW", "сделай свою работу эффективней" и др. Там же есть ссылки на другие форумы, где есть готовые макросы...

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

В принципе файлы *.step меня вполне устраивают. Разобрался откуда вытащить параметры отверстий и габариты детали. Написал функцию, отбирающую и преобразующую нуные параметры. Но. Полез искать функцию для импорта в STEP и не нашел. Можно ли программно выполнить импорт? Не хочется заставлять юзера делать лишние телодвижения...

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

В принципе файлы *.step меня вполне устраивают. Разобрался откуда вытащить параметры отверстий и габариты детали. Написал функцию, отбирающую и преобразующую нуные параметры. Но. Полез искать функцию для импорта в STEP и не нашел. Можно ли программно выполнить импорт? Не хочется заставлять юзера делать лишние телодвижения...

вот запись макроса:

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

' C:\DOCUME~1\ssv22\LOCALS~1\Temp\swx2412\Macro1.swb - macro recorded on 11/19/09 by ssv22

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

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

longstatus = Part.SaveAs3("D:\Work\0_SW_All_Work\SW2009_WORK\ОТВ\Part21.STEP", 0, 0)

End Sub

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

а может быть вы поделитесь с общественностью скриптами

если это, конечно, не коммерческая тайна...

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

Как допишу - обязательно

Наваял черновой вариант проги, получающей параметры цилиндрических отверстий и габаритные размеры детали. От идеи использования *.Step отказался - несерьезно как-то. Конечно, нужна доработка - ловушки багов и всякое прочее, но для меня на данном этапе важна идея. Входные данные:

1. Деталь прямоугольной формы (как я писал у нас мебельное пр-во, так что излишне заморачиваться не стал).

2. Отверстия простые (с плоским дном или сквозные) (не принципиально - Cut или Hole).

Если кому интересно - прикрепляю исходник (VB6) Могу переписать на VB_Net.

PS: тестировалось - SolidWorks 2007

GetParametrsHoles.rar

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

Ну как могут серьезные макросы написанные в SW2007, работать в SW2009

Макросы не могут быть серьезными, или несеръезными, в отличие от людей.

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

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

Наваял черновой вариант проги, получающей параметры цилиндрических отверстий и габаритные размеры детали. От идеи использования *.Step отказался - несерьезно как-то. Конечно, нужна доработка - ловушки багов и всякое прочее, но для меня на данном этапе важна идея. Входные данные:

1. Деталь прямоугольной формы (как я писал у нас мебельное пр-во, так что излишне заморачиваться не стал).

2. Отверстия простые (с плоским дном или сквозные) (не принципиально - Cut или Hole).

Если кому интересно - прикрепляю исходник (VB6) Могу переписать на VB_Net.

PS: тестировалось - SolidWorks 2007

Хотел попробовать в SolidWorks 2009,

он требует для выполнения файлы с расширением *.swp или *.swb

простым переименованием не обошлось :(

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

...

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

Ну, допустим, я написал макрос в среде SW2007. У меня нет SW2009. Запускаем макрос в SW2009 и как он будет работать, если в SW2009 были произведены изменения в API?

Надо переподключать библиотеки API! А их то у меня и не было на момент написания макроса!

Тоже самое в обратном направлении:

с каждой новой версией появляются новые функции API. И если я их использовал в макросе для SW2009, то как этот макрос будет работать под SW2007?

Так что тут совместимость макросов от версии к версии SW - довольно-таки ограничена.

ИМХО

Хотел попробовать в SolidWorks 2009,

он требует для выполнения файлы с расширением *.swp или *.swb

простым переименованием не обошлось :(

Так Вы писали на VB? И теперь собираетесь запускать макрос SW?

Исходник-то в каком формате? В VB я делаю *.ехе

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

Так Вы писали на VB? И теперь собираетесь запускать макрос SW?

Исходник-то в каком формате? В VB я делаю *.ехе

я ничего не писал, просто уважаемый kesean выложил макросы

а я тупо хотел их запустить (ну нету у меня WB и неначем откомпиллировать)

да и запускать я их хочу не как exe, а через встроенную в солид функцию запуска...

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

Исходник-то в каком формате? В VB я делаю *.ехе

Екзешник - это скомпилированный код. Я выложил именно исходники кода. Форматы исходника - VB6 (VisualStudio 98). Исполняемый файл компилировать не стал - это не имеет практического применения, а исходники предложил программистам. Если кто-то программирует только мкросы SW то откройте файл "Form1.frm" блокнотом - там найдете испольняемый код. В *.swp добавьте форму и все контролы, какие указаны в Form1.frm.

Код из Form1.frm скопируйте в модуль созданной формы. В Solid2007 должно работать.

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

Так что тут совместимость макросов от версии к версии SW - довольно-таки ограничена.

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

Просто категорично заявлять, что макросы для 2007 не пойдут в 2009, а я так понял Ваш пост, не совсем корректно. Все зависит от конкретики.

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

Переписал в формате макросов SW.

GetParatresHoles.rar

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

Екзешник - это скомпилированный код. Я выложил именно исходники кода. Форматы исходника - VB6 (VisualStudio 98). Исполняемый файл компилировать не стал - это не имеет практического применения, а исходники предложил программистам. Если кто-то программирует только мкросы SW то откройте файл "Form1.frm" блокнотом - там найдете испольняемый код. В *.swp добавьте форму и все контролы, какие указаны в Form1.frm.

Код из Form1.frm скопируйте в модуль созданной формы. В Solid2007 должно работать.

А, ну да, это я перепутал - исходник и скомпилированный код...

Существуют две возможности программирования на языке VB:

- в среде разработки макросов VBA SW - получаем макрос с соответствующим расширением - *.swp

- в среде разработки VB6 и выше - получаем exe, dll и др.

Я лично работаю в VB6 и получаю ехе-файл, который потом и запускаю.

НО между программированием в этих средах разработки имеются отличия и просто так перенести исходный код в среду VBA SW ИМХО не даст рабочий макрос.

Сравните например процедуру инициализации SW из среды VB6:

"Set swApp = CreateObject("SldWorks.Application")"

и из среды VBA :

"Set swApp = Application.SldWorks"

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

Просто категорично заявлять, что макросы для 2007 не пойдут в 2009, а я так понял Ваш пост, не совсем корректно. Все зависит от конкретики.

Вы не совсем верно меня поняли: я ничего категоричного не заявлял...

Вот это верно: "Все зависит от конкретики"

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

Сравните например процедуру инициализации SW из среды VB6:

"Set swApp = CreateObject("SldWorks.Application")"

и из среды VBA :

"Set swApp = Application.SldWorks"

В посте выше предложил макрос SW преределанный из VB6. Причем практически без излениений - только заменил MSHFlexGrid на ListBox - не у всех в системе он зарегин, а установочный дистрибутив мне делать лень.

PS: "Set swApp = GetObject(, "SldWorks.Application")" осталось и отлично работает :smile: (CreateObject создает экземпляр объекта, а GetObject - получает ссылку на объект)

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

В посте выше предложил макрос SW преределанный из VB6. Причем практически без излениений - только заменил MSHFlexGrid на ListBox - не у всех в системе он зарегин, а установочный дистрибутив мне делать лень.

PS: "Set swApp = GetObject(, "SldWorks.Application")" осталось и отлично работает :smile:

Ну вот у меня SW2009 записывает макросы так:

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

' C:\DOCUME~1\ssv22\LOCALS~1\Temp\swx3192\Macro1.swb - macro recorded on 11/25/09 by ssv22

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

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

boolstatus = Part.Extension.SelectByID2("", "FACE", -0.04209609294657, 0.03999999999985, 7.108113241543E-04, False, 0, Nothing, 0)

Part.SketchManager.InsertSketch True

...

В VB6 это:

Set swApp = Application.SldWorks - работать не будет

А при таком объявлении:

Dim swApp As Object

не будет работать автопоказ методов и свойств при нажатии "точки"

Ну и еще чем мне не нравятся макросы SW : их можно запускать только из среды SW.

А ехе-шник я могу запустить когда хочу...

Некоторое время назад я делал проги - для работы в связке SW-Corel, SW-ACAD, SW-Office...

Если делать это в среде VBA SW, то для отладки той части программы, которая НЕ касается SW, я долженн был-бы обязательно запускать SW...

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

Я согласен, конечно. Макросы SW - аналог VBA, и рассчитан на решение узкого круга задач. VB может все, что может макрос SW, а вот наоборот - увы. Взять хотя бы объект Screen - SW не знает, что это такое. Я уже не говорю о субклассинге и прочем, что сильно помогает программисту. VBA изначально направлен пользователю (а не программисту) для решения каких-либо локальных задач.

В VB6 это:

Set swApp = Application.SldWorks - работать не будет

Это специфическая команда SW, а VB такого класса объекта не знает.

А при таком объявлении:

Dim swApp As Object

не будет работать автопоказ методов и свойств при нажатии "точки"

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

Я согласен, конечно. Макросы SW - аналог VBA, и рассчитан на решение узкого круга задач. VB может все, что может макрос SW, а вот наоборот - увы. Взять хотя бы объект Screen - SW не знает, что это такое. Я уже не говорю о субклассинге и прочем, что сильно помогает программисту. VBA изначально направлен пользователю (а не программисту) для решения каких-либо локальных задач.

Это специфическая команда SW, а VB такого класса объекта не знает.

VB этих свойств и методов изначально тоже не знает. Нужно просто ему про них рассказать, т.е. подключить библиотеки SolidWorks в референсах.

Все правильно, согласен.

Могу еще добавить, что VBA SW не знает еще и объект `Printer` и коллекцию `Printers`.

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • gudstartup
    • Guhl
      Журнал "Огонёк" брать надо, у него бумага хорошая, плотная.
    • Viktor2004
      ну да. Поезд попался не реставрированный. Даже без биотуалета. До последнего момента думал что поеду один в купе. В последнюю секунду вбегает мужик с глазами как у рака. Бросил сумку и давай метаться от туалета к туалету. Но нет. Санитарная зона. А ему очень плохо. Говорю ему, Ладно. Давай этот журнал раскладывай на полу, закрывай дверь и делай свое дело. Потом свернешь в окно выкинешь. Его аж трясет бедного. Закрыли дверь, он расположился, я отвернулся, отошел к окну, открыл его и закурил. Вдруг слышу сзади грозный упрек "Вообще-то в купе не курят!"  
    • gudstartup
      @Viktor2004 согласен. но человек сам хочет попробовать фанук на зуб.. с фирмой или китайцами всегда успеет связаться
    • Viktor2004
      ему надо искать фирму которая продаст FROM модуль к его станку. И ехать покупать вместе с ЧПУ что бы на месте проверить
    • gudstartup
      @Viktor2004 у автора по от 35i работает на 32i а собственный модуль фром неисправен и в м\сх флэш небольшая каша в данных так что ему придется искать другой фром модуль от 32i чтобы считать  рабочий   образ с нормальными данными.  
    • Viktor2004
      Я пробовал считывать так. Выпаял микросхему памяти из модуля, затем купил CF карту с таким же контроллером. Выпаял оттуда микросхему на 128Mb она была на месте "0" и впаял вместо нее микросхему с модуля. https://market.yandex.ru/product--karta-pamiati-cfg8b51mkazws-zaveb-tdk-512-mb/109304488?sku=102980643607&uniqueId=45170721&do-waremd5=G3-wTXG-Bm2zCvteY2KyaA&resale_goods=resale_resale&resale_goods_condition=resale_excellent Так как контроллеры совпадают, GBDriver RA8 программой WINHEX я снял образ с карты. Там уже все блоки были на своих местах. Только вряд ли вам это поможет. На 31i-A такое бы еще прокатило, а на 31i-B в системе появился файл SYS CNTL. Он генерится как на основе загружаемого софта, так и на основе ID-номера контроллера GBDriver. Так что побитно скопированная микросхема у меня работать не стала.
    • gudstartup
      @ДмитрийКм образ с плохого фром модуля у вас явно поврежден так что его на работоспособность можете не рассчитывать. надо считывать системные файлы с хорошего станка @ДмитрийКм если с хорошего 32i фром модуль не дадут то надо искать  файлы вашего по отдельно. но учитывая сложности с бэкапом системы у современных вряд ли они имеются в чистом виде.
    • a_schelyaev
      Убедиться в том, что "учет гидростатики" работает, можно на примере со свободной конвекцией. Сделали проект с "коробкой": справа стенка горячая, слева холодная, снизу и сверху - адиабатика. Если моделировать без учета гидростатики, то мы опять же видим "гидростатический" столб, и видим, что воздух движется в результате нагрева в поле действия силы тяжести: Если же включить "учет гидростатики", то гидростатического столба мы не видим, давление практически постоянно. Однако по векторам мы видим, что движение идет, то есть все работает так же, как и в первом случае, только решатель оперирует другими значениями давления.   Как итог - накатали заявку в следующей версии выводить "Давление+гидростатика", чтобы все было наглядно и не приходилось эти умозрительные эксперименты проводить.   В документации смысл фразы не в том, что давление не нужно задавать, а в том, что при задании его значений не нужно учитывать гидростатический перепад. Если вход находится сверху, а выход снизу, то давления на них будут отличаться за счет гидростатики. И вот при использовании "учета" не нужно высчитывать, сколько составит перепад и прибавлять/вычитать из него нужные значения. Это может так же помогать на вертикальных границах входа/выхода. У нас в FlowVision есть туториал с нефтью: там сбоку вертикальная входная граница. В проекте включен учет гидростатики и стоит просто полное давление 0. Если же учет отключить, то придется задавать на этой границе значение через формулу, которая учитывает гидростатику, пример вот здесь:    
    • a_schelyaev
      Модель k-e, т.к. Y+=<1 в Компасе сейчас недостижим. Поэтому не нужно качаться на папе, он не для этого вешался.
×
×
  • Создать...