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

Разработка приложения под Solidworks на языке C++


reaper

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

Еж ли верить ВикиПедро

...

Не-е, это все слишком сложно для меня, до межплатформенного программирования я не дорос! Дай бог для Windows кое-что освоить...
Ссылка на сообщение
Поделиться на других сайтах


Вот уж не знаю что это означает, но посмотрите в интернете программы с допиской portable - это означает, что для использования ее (этой программы) не нужно инсталлировать, она работает сразу без инсталляции. Как еще сказать?

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

Суть dll понимаю. Почему бы и не иметь для каждой программы (хотя-бы для тех, которые пишутся в одиночку, для небольших программ) свои ресурсы, вроде бы сейчас проблем с размером винчестеров нет, возможно, даже это было более актуально для старых компьютеров и MS DOS, но, опять-же, все влезало, никто не жаловался.

Отошли от темы...

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

Думаю, заново нужно объясниться чего я хочу.

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

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

...

Думаю, заново нужно объясниться чего я хочу.

Есть компьютер с установленным солидом, есть пользователь, у которого на флешке записано приложение, выполняющее с солидом какие-то операции, пусть это будет построение какой-то детали.

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

ИМХО для небольших программ, "оформленных" в виде EXE-шников это можно.

Для серьезных программ, тут два варианта:

или я не знаю как это сделать,

или такое невозможно.

:unsure:

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

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

Если у пользователя нет установленного Solidworks, то ваша программа не поможет. Или же вам нужно "разбирать" Solidworks, делать из него Portable-версию и прикладывать эту версию к своей программе.
Ссылка на сообщение
Поделиться на других сайтах

Если у пользователя нет установленного Solidworks, то ваша программа не поможет. Или же вам нужно "разбирать" Solidworks, делать из него Portable-версию и прикладывать эту версию к своей программе.

Ну конечно же имеется в виду с установленным солидом.

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

У меня возникли трудности на этапе подключения библиотек *.tlb в Visual Studio 2008 - какие кнопки нажимать, чтобы добавить библиотеки?

reaper обещал рассказать, но что-то молчит. А?

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

Или же вам нужно "разбирать" Solidworks, делать из него Portable-версию...

А было бы очень даже не плохо :rolleyes:
Ссылка на сообщение
Поделиться на других сайтах

У меня возникли трудности на этапе подключения библиотек *.tlb в Visual Studio 2008 - какие кнопки нажимать, чтобы добавить библиотеки?

Если честно, то я что-то не понял, какой VB6 в VS2008? Там только VB.Net. В этом случае вам надо подключить SolidWorks.Interop.sldworks, SolidWorks.Interop.swconst. В Solution Explorer на папке References правая кнопка мыши Add References, в закладке .NET выбрать эти библиотеки. Только надо учесть, что VB.NET очень сильно отличается от VB6. Если вы делаете exe-файл в VB.NET, то для работы программы достаточно взять скомпилированный файл из папки Release и эти библиотеки из той же папки, и скопировать на другой комьютер в любую папку.

Если же вы делаете add-ins (dll) c помощью мастера, который входит в состав API SDK SW, то лучше в той же студии создать Setup проект. Как его создать, описано в справке по API SW.

А файлы *.tlb в VS2008 подключаются при использовании только Unmanaged C++ через директиву #import (обычно в stdafx.h)

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

Если честно, то я что-то не понял, какой VB6 в VS2008? Там только VB.Net. В этом случае вам надо подключить SolidWorks.Interop.sldworks, SolidWorks.Interop.swconst. В Solution Explorer на папке References правая кнопка мыши Add References, в закладке .NET выбрать эти библиотеки. Только надо учесть, что VB.NET очень сильно отличается от VB6. Если вы делаете exe-файл в VB.NET, то для работы программы достаточно взять скомпилированный файл из папки Release и эти библиотеки из той же папки, и скопировать на другой комьютер в любую папку.

Если же вы делаете add-ins (dll) c помощью мастера, который входит в состав API SDK SW, то лучше в той же студии создать Setup проект. Как его создать, описано в справке по API SW.

А файлы *.tlb в VS2008 подключаются при использовании только Unmanaged C++ через директиву #import (обычно в stdafx.h)

Для написания программы, которая бы строила бобышку в солидворксе я установил Visual Basic 6.0 , Borland C++ Builder 6.0, Code Gear Rad Studio 2009, Visual Studio 2008. Пытаюсь хоть в чем-то написать. Пока получилось только в VB и в Visual Studio по примеру reaper`a. Но ни в одной ни в другой среде я не умею упаковывать программу так, чтобы она была отдельным exe файлом со встроенными ресурсами, а хочется.

В .Net лезть боюсь, чувствую, он перевернет все мое представление о программировании.

Кстати, ssv22, видите, все-же, возможно упаковать программу так, чтобы она работала на другом компе без инсталляции.

При использовании директивы #import пишет что некоторые классы уже определены, и не подключает библиотеку пока не примет вид:

#import "sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, rename("PropertySheet", "ShowPropertySheet"),rename("GetOpenFileName", "SWGetOpenFileName")  //the SolidWorks type library



#import "swconst.tlb"  raw_interfaces_only, raw_native_types, no_namespace, named_guids  //the SolidWorks constant type library

Я правильно понимаю, что эти два класса переименовываются и дальше их использование происходит через новое имя?

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

Для написания программы, которая бы строила бобышку в солидворксе я установил Visual Basic 6.0 , Borland C++ Builder 6.0, Code Gear Rad Studio 2009, Visual Studio 2008. Пытаюсь хоть в чем-то написать. Пока получилось только в VB и в Visual Studio по примеру reaper`a. Но ни в одной ни в другой среде я не умею упаковывать программу так, чтобы она была отдельным exe файлом со встроенными ресурсами, а хочется.

В .Net лезть боюсь, чувствую, он перевернет все мое представление о программировании.

...

Ну вот, опять "упаковка"!

Это здесь совсем ни причем. Надо просто создать/построить приложение. ЕХЕ-шник сам сделается в папке текущего проекта "..\bin\Release\", который можно просто копировать на другой ПК(об этом писал выше Shvg)

В VB.Net я тоже не лезу...

...

Кстати, ssv22, видите, все-же, возможно упаковать программу так, чтобы она работала на другом компе без инсталляции.

...

Вижу, вижу... Просто как-то не приходилось сталкиваться с этим делом. Я кое-что почитал по этой теме и :

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

2) создание дистрибутива в VB6.0 у меня занимает 1-3 мин, инсталяция на другом компе - секунды, все на "полуавтомате". А чтобы создать Portable-приложение такого времени ИМХО никак не хватит, столько там всего проделать надо...

3) инсталяция требуется только один раз, потом можно просто копировать измененные файлы(откомпилированные на исходном ПК)

4) у меня вот возник вопрос: эта технология оффициальная, т.е. оффициально производятся и распространяются такие Portable-версии или это на уровне "самоделок"?

5) чем-то мне это напоминает работу с образами дисков...

...

При использовании директивы #import пишет что некоторые классы уже определены, и не подключает библиотеку пока не примет вид:

#import "sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, rename("PropertySheet", "ShowPropertySheet"),rename("GetOpenFileName", "SWGetOpenFileName")  //the SolidWorks type library



#import "swconst.tlb"  raw_interfaces_only, raw_native_types, no_namespace, named_guids  //the SolidWorks constant type library

Я правильно понимаю, что эти два класса переименовываются и дальше их использование происходит через новое имя?

Тут я не знаю, сам разбираюсь сейчас...

Кстати, почему именно на С++, вроде `C#` попроще будет.

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

Вижу, вижу... Просто как-то не приходилось сталкиваться с этим делом. Я кое-что почитал по этой теме и :

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

2) создание дистрибутива в VB6.0 у меня занимает 1-3 мин, инсталяция на другом компе - секунды, все на "полуавтомате". А чтобы создать Portable-приложение такого времени ИМХО никак не хватит, столько там всего проделать надо...

3) инсталяция требуется только один раз, потом можно просто копировать измененные файлы(откомпилированные на исходном ПК)

4) у меня вот возник вопрос: эта технология оффициальная, т.е. оффициально производятся и распространяются такие Portable-версии или это на уровне "самоделок"?

5) чем-то мне это напоминает работу с образами дисков...

Кстати, почему именно на С++, вроде `C#` попроще будет.

1. Вы так пишете, будто никогда не писали небольших программ или утилит, сразу со школьной скамьи начали писать что-то большое.

2. Ну, может быть, это и имеет смысл, просто не очень красивое решение, и вообще, ИМХО.

3.

4. Я так понимаю, на уровне "самоделок", производители коммерческих программ не заинтересованы в том, чтобы их софт можно было с легкостью скопировать, перенести на другой комп, т.к. за каждое рабочее место нужно заплатить, а свободное размножение и перенос с одной машины на другую - это воровство.

5. Не знаю чем.

6. Сишарп, возможно, и попроще, но я с его синтаксисом вообще не знаком, пока хочется получить результат на любом языке.

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

1. Вы так пишете, будто никогда не писали небольших программ или утилит, сразу со школьной скамьи начали писать что-то большое.

2. Ну, может быть, это и имеет смысл, просто не очень красивое решение, и вообще, ИМХО.

3.

4. Я так понимаю, на уровне "самоделок", производители коммерческих программ не заинтересованы в том, чтобы их софт можно было с легкостью скопировать, перенести на другой комп, т.к. за каждое рабочее место нужно заплатить, а свободное размножение и перенос с одной машины на другую - это воровство.

5. Не знаю чем.

6. Сишарп, возможно, и попроще, но я с его синтаксисом вообще не знаком, пока хочется получить результат на любом языке.

1. конечно с небольших я и начинал, но никогда у меня не возникало вопроса о создании portable-приложения.

По-моему этот вопрос мало имеет отношения к программированию - просто проводится ряд операций с уже готовым приложением.

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

2. а языки программирования - красивое решение или как? Создание дистрибутивов - составная часть программирования. Это же не моя какая-то прихоть... Это история программирования.

Просто в моем понимании - создание дистрибутивов - это всеми признанный способ распространения/переносимости приложений. А вот Portable - мне непонятно какую нишу занимает...

Я вот и хочу узнать: это новый метод распространения/переносимости приложений или "изобретения самоделкиных"?

4. я посмотрел список программ, которые предлагаются в portable-версиях - так там все больше разного рода утилиты - просмотрщики, браузеры, плееры и т.д. Не на шел я там что-то более серьезного...

А эти утилитки могут быть и бесплатными. Что-то мне кажется весьма сомнительным, чтобы производители серьезного ПО вот так продавали свой продукт в виде одного exe-шника. Как его защитишь-то?

5. работа с образми дисков - создание образов компакт-диска, раздела HDD... А в Portable - похоже создается образ отдельного приложения.

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

У меня вот такой вопрос

в функции выдаёт ошибки :

error LNK2028: unresolved token (0A000130) "void __cdecl GetXFormComponent(struct IComponent2 *,double *)" (?GetXFormComponent@@$$FYAXPAUIComponent2@@PAN@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)

error LNK2019: unresolved external symbol "void __cdecl GetXFormComponent(struct IComponent2 *,double *)" (?GetXFormComponent@@$$FYAXPAUIComponent2@@PAN@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)

void GetXFormComponent(IComponent2 *pComponent[50], double *dData)

{

int j;

HRESULT hres;

IMathTransform *swXForm =NULL ;

hres = pComponent[j]->get_Transform2(&swXForm);

VARIANT vArrayData[50];

hres = swXForm->get_ArrayData(&vArrayData[j]);

SAFEARRAY *pSA = V_ARRAY(&vArrayData[j]);

double value;

SafeArrayLock(pSA);

for(long i = 0; i < 16; i++)

{

SafeArrayGetElement(pSA, &i, (VOID*)(&value));

dData = value;

}

SafeArrayUnlock(pSA);

SafeArrayUnaccessData(pSA);

SafeArrayDestroy(pSA);

}

Что делать ?

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

4. я посмотрел список программ, которые предлагаются в portable-версиях - так там все больше разного рода утилиты - просмотрщики, браузеры, плееры и т.д. Не на шел я там что-то более серьезного...

А эти утилитки могут быть и бесплатными. Что-то мне кажется весьма сомнительным, чтобы производители серьезного ПО вот так продавали свой продукт в виде одного exe-шника. Как его защитишь-то?

На одном известном форуме выложены Компас 9,10,11 portable... Ссылку привести не могу.. Варез ;-S...

А уж офис, корел и фотошоп валяются в инете на каждом углу..

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

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

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

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

Solidworks portable имеется, только запрос в поиске набрать: http://yandex.ru/yandsearch?text=solidwork...k1%2Ftc19%2Fnc1
Ссылка на сообщение
Поделиться на других сайтах

И как я не догадался??? :'-( ... давно поискть надо было..

сегодня же добавлю ссылки на скачку в USD...

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

У меня вот такой вопрос

в функции выдаёт ошибки :

..........

Что делать ?

Странная какая то у вас функция:

void GetXFormComponent(IComponent2 *pComponent[50], double *dData) // зачем передавать массив из пятидесяти указателей на IComponent2, если он не будет использоваться в функции? Мне не совсем понятно. Да и почему именно 50?

{

	int j; // переменная обявлена. но не проинициализирована в дальненйшем. Значение может быть любым, даже отрицательным. А вы его используете для доступа к членам массива

	HRESULT hres;

 	IMathTransform *swXForm =NULL;

	hres = pComponent[j]->get_Transform2(&swXForm); // например здесь



	VARIANT vArrayData[50];

	hres = swXForm->get_ArrayData(&vArrayData[j]); // и здесь тоже



	SAFEARRAY *pSA = V_ARRAY(&vArrayData[j]); //  и тут

	double value;

	SafeArrayLock(pSA);

	for(long i = 0; i < 16; i++)

	{

		SafeArrayGetElement(pSA, &i, (VOID*)(&value));

		dData[i] = value;

	}

	SafeArrayUnlock(pSA);

	SafeArrayUnaccessData(pSA);

	SafeArrayDestroy(pSA);

}
Если она была взята из моего примера, что я вам высылал, то там передавался в функцию только один указатель на IComponent2 и заполнялась dData только для одного компонента.

P.S. Честно говоря, не совсем понял, что вы хотите сделать.

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

Странная какая то у вас функция:

void GetXFormComponent(IComponent2 *pComponent[50], double *dData) // зачем передавать массив из пятидесяти указателей на IComponent2, если он не будет использоваться в функции? Мне не совсем понятно. Да и почему именно 50?

{

	int j; // переменная обявлена. но не проинициализирована в дальненйшем. Значение может быть любым, даже отрицательным. А вы его используете для доступа к членам массива

	HRESULT hres;

 	IMathTransform *swXForm =NULL;

	hres = pComponent[j]->get_Transform2(&swXForm); // например здесь



	VARIANT vArrayData[50];

	hres = swXForm->get_ArrayData(&vArrayData[j]); // и здесь тоже



	SAFEARRAY *pSA = V_ARRAY(&vArrayData[j]); //  и тут

	double value;

	SafeArrayLock(pSA);

	for(long i = 0; i < 16; i++)

	{

		SafeArrayGetElement(pSA, &i, (VOID*)(&value));

		dData[i] = value;

	}

	SafeArrayUnlock(pSA);

	SafeArrayUnaccessData(pSA);

	SafeArrayDestroy(pSA);

}
Если она была взята из моего примера, что я вам высылал, то там передавался в функцию только один указатель на IComponent2 и заполнялась dData только для одного компонента.

P.S. Честно говоря, не совсем понял, что вы хотите сделать.

Да это функция из вашего примера . но я хотел сделать чтобы она раюотала для одной dData и для i-го элемента массива указателей IComponent2
Ссылка на сообщение
Поделиться на других сайтах

Да это функция из вашего примера . но я хотел сделать чтобы она раюотала для одной dData и для i-го элемента массива указателей IComponent2

Так объявите этот массив в области динамического обмена

double *dData = new double[16];

..............

// не забудьте удалить этот массив, когда закончите с ним работать

delete[] dData;
и передавайте его в функцию, с указателем на IComponent2. В ней он и будет заполнятся значениями этого компонента.
Ссылка на сообщение
Поделиться на других сайтах
  • 3 недели спустя...

Такой вопрос: есть библиотека материалов в SolidWorks можно назначить материал детали: сталь, медь или ещё что-то. Как можно ли задать материал из приложения на С++ ? C помощью макроса ничего не понятно SelectByID2("Неизвестный",BROWSERITEM......)

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

Такой вопрос: есть библиотека материалов в SolidWorks можно назначить материал детали: сталь, медь или ещё что-то. Как можно ли задать

материал из приложения на С++ ? C помощью макроса ничего не понятно SelectByID2("Неизвестный",BROWSERITEM......)

У меня макрос записался так:

...

boolstatus = Part.Extension.SelectByID2("Неизвестный", "BROWSERITEM", 0, 0, 0, False, 0, Nothing, 0)

Part.ClearSelection2 True

Part.SetMaterialPropertyName2 "По умолчанию", "C:/Program Files/SolidWorks Corp/SolidWorks/lang/russian/sldmaterials/solidworks materials.sldmat", "Латунь"

...

Похоже строка:

"boolstatus = Part.Extension.SelectByID2("Неизвестный", "BROWSERITEM", 0, 0, 0, False, 0, Nothing, 0)" - это просто запись нажатия прав.Кн.Мыши

и

boolstatus = False

и, видимо, смысла в ней нет.

Я ее закомментировал и без нее работает...

А само присвоение материала тут:

"Part.SetMaterialPropertyName2 "По умолчанию", "C:/Program Files/SolidWorks Corp/SolidWorks/lang/russian/sldmaterials/solidworks materials.sldmat", "Латунь""

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

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

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

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

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

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

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

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

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

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

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




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