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

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

Имелось ввиду работа программы с SW. Взаимодействие с SW намного быстрее у dll ( точнее сказать add-ins к SW в виде dll) Все это из личного опыта.

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


Здравствуйте!

Помогите пожалуйста новичку!

У меня установлена SolidWorks 2010 и Visual Studio 2010.

Установила SW API SDK.

Я программирую на С++.

Я не понимаю с чего начать изучать API!

Взяла начальный код из справки.

Создаю консольное приложение и вот на этом

НRESULT hres = swApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);

прога останавливается и дальше не идёт.

Помогите плиз! Если кто-то в этом разбирается и может всё мне объяснить, договоримся!

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

Здравствуйте!

Помогите пожалуйста новичку!

У меня установлена SolidWorks 2010 и Visual Studio 2010.

Установила SW API SDK.

Я программирую на С++.

Я не понимаю с чего начать изучать API!

Взяла начальный код из справки.

Создаю консольное приложение и вот на этом

НRESULT hres = swApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);

прога останавливается и дальше не идёт.

Помогите плиз! Если кто-то в этом разбирается и может всё мне объяснить, договоримся!

Запись макроса пробовали? И разобраться что там к чему.

Желательно включить режим "Запись макроса", провести какое-нибудь элементарное действие, остановить запись, SW запросит имя(и расшиерние). Вот потом можно будет и разбирать что там понаписано...

PS а SW-то запускается? А то я недавно установил Visual Studio 2010 и после этого SW перестал запускаться вообще!

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

А макрос можно разве записывать на С++? Я не знаю ни С# ни VBA!

Да, у меня была проблемка после того как я установила VS2010, мне пришлось переустанавливать SW.

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

И ещё вопрос - у меня исходные данные в виде облака точек NURBS. И мне нужно по ним построить твердую поверхность и ещё там кое-что достроить. В каком виде лучше это делать? В виде макроса, .dll, или Standalone Application (.exe file)?

Посоветуйте плиз!!

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

А макрос можно разве записывать на С++? Я не знаю ни С# ни VBA!

Да, у меня была проблемка после того как я установила VS2010, мне пришлось переустанавливать SW.

Тут я видимо перегнул палку... пардон...

Тогда надо изучать примеры из API HELP :

"XXX:\Program Files\SolidWorks\api\sldworksapi.chm" - это справка от SW2008 - она полегче для понимания и там есть ссылка на кучу всяких примеров, в т.ч. и на С++.

В справке по API к SW2010 я такой ссылки не нашел.

Кинуть клич на форуме - "Даешь примеры на С++" ! :-)

Искать другие форумы.

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

И ещё вопрос - у меня исходные данные в виде облака точек NURBS. И мне нужно по ним построить твердую поверхность и ещё там кое-что

достроить. В каком виде лучше это делать? В виде макроса, .dll, или Standalone Application (.exe file)?

Посоветуйте плиз!!

Насколько я знаю, кто пишет на С++ - пишет `DLL`.

Вот ЕХЕ или DLL - тут надо решить вопрос быстродействия. В некоторых случаях ЕХЕ быстрее, а в некоторых - наоборот.

Еще DLL легче подключать к SW - это как нормальный плагин получается.

Про макросы и С++ - не знаю, думаю такое сочетание надо просто забыть...

Правда сам я пишу на VB в виде EXE и ничего, работает. Правда иногда/редко быстродействие подводит...

Еще плюсик в пользу ЕХЕ : его запустил с утра, надо - развернул воспользовалься и свернул. А вот DLL - вот вылетит у Вас SW, запустите по-новой, опять этот DLL цеплять, а там все данные пропали...

А ЕХЕ-шник у меня висит и в случае вылета SW и данные оттуда никуда не пропадают.

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

Здравствуйте!

Помогите пожалуйста новичку!

У меня установлена SolidWorks 2010 и Visual Studio 2010.

Установила SW API SDK.

Я программирую на С++.

Я не понимаю с чего начать изучать API!

Взяла начальный код из справки.

Создаю консольное приложение и вот на этом

НRESULT hres = swApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);

прога останавливается и дальше не идёт.

Помогите плиз! Если кто-то в этом разбирается и может всё мне объяснить, договоримся!

К, сожалению, у меня нет VS2010, но, думаю, нижележащий пример будет там работать. Это консольное приложение, которое строит цилиндр. Для упрощения многие проверки убраны. Создано в VS2003. SW2010SP4. WinXPx32 Sp3

И ещё вопрос - у меня исходные данные в виде облака точек NURBS. И мне нужно по ним построить твердую поверхность и ещё там кое-что достроить. В каком виде лучше это делать? В виде макроса, .dll, или Standalone Application (.exe file)?

Посоветуйте плиз!!

Как вам удобнее. Могу только сказать, из личного опыта, что реализация в виде *.dll, созданной при помощи мастера SW API SDK быстрее на порядок и больше, чем *.exe

kpx1.rar

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

Shvg, я посмотрела пример, у меня почему-то эскиз не создаётся, если он не существует! Как узнать это имя плоскости?

У Вас оно Plane1.

ISketch *swSketch = NULL;

hres = swSketchMgr->get_ActiveSketch(&swSketch); // эскиз

if(swSketch == NULL)// если эскиз не активный, то создаем активный эскиз на Plane1

{

CComBSTR strPlane = L"Plane1"; // это имя плоскости

CComBSTR typeObj = L"PLANE";

hres = swModelExt->SelectByID2(strPlane, typeObj, 0.0, 0.0, 0.0, VARIANT_FALSE, 0, NULL, swSelectOptionDefault, &bres);

if(bres == VARIANT_FALSE)

{

message = L"Плоскость не выбрана!";

swApp->SendMsgToUser2(message, swMbInformation, swMbOk, &lres);

::CoUninitialize();

return 0;

}

hres = swSketchMgr->InsertSketch(VARIANT_TRUE);

}

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

Shvg, я посмотрела пример, у меня почему-то эскиз не создаётся, если он не существует! Как узнать это имя плоскости?

У Вас оно Plane1.

...

Тут все зависит от языка на котором вы работаете в SW.

Для англ может быть `Plane1` или `Front Plane`, на русском `Спереди`

Создайте просто вручную деталь и посмотрите как у вас называются базовые плоскости. Одно из имен базовых плоскостей и надо вписать в программу. В ней и дожен создаваться эскиз.

Или иначе перед созданием цилиндра надо писать код по созданию плоскости с именем `Plane1`. Но если таковая уже есть как базовая, то ИМХО будет ошибка.

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

Shvg, я посмотрела пример, у меня почему-то эскиз не создаётся, если он не существует! Как узнать это имя плоскости?

У Вас оно Plane1.

Plane1 - это одна из основных трех плоскостей в дереве проектирования. Я работаю в аглицкой версии. У вас может быть другая. Да и пример был написан только для примера (простите за тофтологию) работы API на C++.
Ссылка на сообщение
Поделиться на других сайтах

exe. с dll сложнее разбираться по-моему!

Ещё вопрос: а как сделать вытягивание фигуры по траектории? что за функция и какие параметры?

И ещё заодно про вращение фигуры расскажите пожалуйста!

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

У меня исходный файл в формате stl, как мне пройтись по всем точкам?

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

Мне нужен человек, умеющий писать на С++ скрипты для SolidWorks'а!

Мне нужно пару консультаций онлайн либо в реале в Москве!! Очень срочно! Плачу много денег!)

Ссылка на сообщение
Поделиться на других сайтах
  • 2 месяца спустя...

К вопросу об освоении Solidworks API. Возможно ли создать виндовое (Windows) приложение, которое будет, например, открывать файл сборки SLDASM и добавлять в него деталь из SLDPRT, сохранять результат по указанному пути, при этом не запуская графический интерфейс пользователя Solidworks? Можно ли создать приложение, которое будет делать то же самое с запуском Solidworks? В смысле запускаем exe'шник, открывается Solidworks, происходит какое-то колдунство, Solidworks закрывается, сборка изменена. Главное, чтобы эти действия происходили без участия пользователя, в том смысле, что пользователю не нужно самому запускать Solidworks, а в нём какой-то макрос.

Может ли кто-нибудь предоставить пример кода подобного приложения? Всё что мне удалось пока наделать после изучения <noindex>документации</noindex> это недо-Helloworld на C#.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace ConsoleApplication1

{

	class Program

	{

		static int Main(string[] args)

		{

			Console.WriteLine("Hello Solidwoks. ");



			// Ниже должна происходить Solidworks'ная магия. 

			SldWorks.SldWorks swAppl;		// Переменная... 

			swApp = new SldWorks.SldWorks(); // В которой мы храним наш экземпляр чего-то solidworks'ного

			swApp.ExitApp();				 // Который ничего не делает. 

			swApp = null;



			// Keep the console window open in debug mode.

			Console.WriteLine("Press any key to exit.");

			Console.ReadKey();



			// Everything is OK. 

			return 0;

		}

	}

}
Программа собирается и работает, но ничего Solidworks'ного не делает. Можете показать пример который хоть что-то делает?
Ссылка на сообщение
Поделиться на других сайтах

Программа собирается и работает, но ничего Solidworks'ного не делает. Можете показать пример который хоть что-то делает?

Например вот это:

using System;

using System.Collections.Generic;

using System.Text;

using SolidWorks.Interop.sldworks;

using SolidWorks.Interop.swconst;



namespace SW_1

{

	class Program

	{

		static void Main(string[] args)

		{

			SldWorks swApp = new SldWorks(); 

			if (swApp == null)

				return;

			swApp.Visible = true; // true - SW видим, false - невидим

			swApp.SendMsgToUser2("Привет!", (int)swMessageBoxIcon_e.swMbInformation, (int)swMessageBoxBtn_e.swMbOk);

			swApp.ExitApp();

			swApp = null;

		}

	}

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

using SolidWorks.Interop.sldworks;

using SolidWorks.Interop.swconst;

Вот эти две строчки вызвали проблемы. Надо добавить ссылки на какие-то компоненты?
Ссылка на сообщение
Поделиться на других сайтах

using SolidWorks.Interop.sldworks;

using SolidWorks.Interop.swconst;
Вот эти две строчки вызвали проблемы. Надо добавить ссылки на какие-то компоненты?
Да. На SolidWorks.Interop.sldworks.dll и SolidWorks.Interop.swconst.dll. Я так обычно делаю в C#. Но можно и как в вашем примере, ссылки на sldworks.tlb и swconst.tlb.
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

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




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