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

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


reaper

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

Такой вопрос : как присвоить значение указателю чтобы он не выдавал нулевое значение перед тем как задать материал детали ?

hres = swApp->IActivateDoc3(L"Деталь0", VARIANT_TRUE, &lErrors, &swModel); // активируем документ сборки

hres = swPart->SetMaterialPropertyName2(L"Default",database,L"Простая углеродистая сталь");

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


Такой вопрос : как присвоить значение указателю чтобы он не выдавал нулевое значение перед тем как задать материал детали ?

hres = swApp->IActivateDoc3(L"Деталь0", VARIANT_TRUE, &lErrors, &swModel); // активируем документ сборки

hres = swPart->SetMaterialPropertyName2(L"Default",database,L"Простая углеродистая сталь");

Примерно так:

long docType;

	hres = swModel->GetType(&docType);

	if(docType != swDocPART)

	{

		strMessage = L"Функция работает только с документом детали!";

		swApp->SendMsgToUser2(strMessage, swMbInformation, swMbOk, &lResult);

		::CoUninitialize();

		return 0;

	}



	CComBSTR strDataBase = L"solidworks materials.sldmat";

	CComBSTR strConfig = L"Default";

	CComBSTR strMaterial = L"1023 Carbon Steel Sheet (SS)";

	IPartDoc *swPart = NULL;

	hres = swModel->QueryInterface(IID_IPartDoc, (void**)&swPart);

	hres = swPart->SetMaterialPropertyName2(strConfig, strDataBase, strMaterial);

	

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

Написал следующим образом - не работает. Может быть я неправильно strMaterial прописываю ?

CComBSTR strDataBase = L"C:\\Program Files\\SolidWorks\\lang\\russian\\sldmaterials\\solidworks materials.sldmat";

CComBSTR strConfig = L"Default";

CComBSTR strMaterial = L"Легированная сталь";

IPartDoc *swPart = NULL;

hres = swModel->QueryInterface(IID_IPartDoc, (void**)&swPart);

hres = swPart->SetMaterialPropertyName2(strConfig, strDataBase, strMaterial);

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

Написал следующим образом - не работает. Может быть я неправильно strMaterial прописываю ?

CComBSTR strDataBase = L"C:\\Program Files\\SolidWorks\\lang\\russian\\sldmaterials\\solidworks materials.sldmat";

CComBSTR strConfig = L"Default";

CComBSTR strMaterial = L"Легированная сталь";

IPartDoc *swPart = NULL;

hres = swModel->QueryInterface(IID_IPartDoc, (void**)&swPart);

hres = swPart->SetMaterialPropertyName2(strConfig, strDataBase, strMaterial);

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

Оказалось всё просто. Для того чтобы заработало пришлось переставить SolidWorks - поставить 2009. В 2008 ничего не работало

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

Как мне задать материал в нескольких деталях подряд ?

Задаю материал в первой детали

hres = swApp->IActivateDoc3(L"Деталь0", VARIANT_TRUE, &lErrors, &swModel); //

CComBSTR strDataBase = L"C:/PROGRA~1/SOLIDW~1/lang/russian/sldmaterials/solidworks materials.sldmat";

CComBSTR strConfig = L"По умолчанию";

CComBSTR strMaterial = L"Легированная сталь";

IPartDoc *swPart = NULL;

hres = swModel->QueryInterface(IID_IPartDoc, (void**)&swPart);

hres = swPart->SetMaterialPropertyName2(strConfig , strDataBase, strMaterial);

Пытаюсь открыть вторую :

hres = swApp->IActivateDoc3(L"Деталь1", VARIANT_TRUE, &lErrors, &swModel); // ничего не выходит опять попадаю на "Деталь0"

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

Как мне задать материал в нескольких деталях подряд ?

Задаю материал в первой детали

hres = swApp->IActivateDoc3(L"Деталь0", VARIANT_TRUE, &lErrors, &swModel); //

CComBSTR strDataBase = L"C:/PROGRA~1/SOLIDW~1/lang/russian/sldmaterials/solidworks materials.sldmat";

CComBSTR strConfig = L"По умолчанию";

CComBSTR strMaterial = L"Легированная сталь";

IPartDoc *swPart = NULL;

hres = swModel->QueryInterface(IID_IPartDoc, (void**)&swPart);

hres = swPart->SetMaterialPropertyName2(strConfig , strDataBase, strMaterial);

Пытаюсь открыть вторую :

hres = swApp->IActivateDoc3(L"Деталь1", VARIANT_TRUE, &lErrors, &swModel); // ничего не выходит опять попадаю на "Деталь0"

Не видно где Вы открываете вторую деталь? Как кстати и первую. Вы только ее "активируете"!

Перед этим она должна быть открыта:

"

//Open the component (part) document 1-я деталь

CComBSTR sCompName(L"c:\\Program Files\\SolidWorks\\samples\\tutorial\\toolbox\\Part1.sldprt");

swApp->OpenDoc6(sCompName, swDocPART, swOpenDocOptions_Silent, sDefaultConfiguration, &lErrors, &lWarnings, &tmpObj);

hres = swApp->IActivateDoc3(L"Деталь1", VARIANT_TRUE, &lErrors, &swModel); // ничего не выходит опять попадаю на "Деталь0"

//Activate the part document

swApp->IActivateDoc3(sCompName, true, &lErrors, &swModel);

...

присвоение материала...

...

2-я деталь:

CComBSTR sCompName(L"c:\\Program Files\\SolidWorks\\samples\\tutorial\\toolbox\\Part2.sldprt");

swApp->OpenDoc6(sCompName, swDocPART, swOpenDocOptions_Silent, sDefaultConfiguration, &lErrors, &lWarnings, &tmpObj);

//Activate the part document

swApp->IActivateDoc3(sCompName, true, &lErrors, &swModel);

...

присвоение материала...

...

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

Деталь уже открыта была ранее. Только всё равно результат тот же

Ну Вы же написали:

"

Пытаюсь открыть вторую :

hres = swApp->IActivateDoc3(L"Деталь1", VARIANT_TRUE, &lErrors, &swModel); // ничего не выходит опять попадаю на "Деталь0"

"

И как понять фразу: "опять попадаю на "Деталь0" ?

Откуда попадаете?

Откройте явно(ручками) две детали, расположите их окна рядом и попробуйте активировать их поочередно в режиме отладки.

Какое значение имеет `hres` ?

Может после активирования документа детали требуется что-то типа такого:

"

' Grab the currently active document

Set Model = swApp.ActiveDoc

"

Это из VB.

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

Проблема решилась просто: оказалось что нужно было обнулить swModel и swPart

hres = swApp->IActivateDoc3(L"Деталь0", VARIANT_TRUE, &lErrors, &swModel);

hres = swModel->QueryInterface(IID_IPartDoc, (void**)&swPart);

hres = swPart->SetMaterialPropertyName2(strConfig , strDataBase, strMaterial);

swModel = NULL;

swPart = NULL;

hres = swApp->IActivateDoc3(L"Деталь1", VARIANT_TRUE, &lErrors, &swModel);

hres = swModel->QueryInterface(IID_IPartDoc, (void**)&swPart);

hres = swPart->SetMaterialPropertyName2(strConfig , strDataBase,L"Медь");

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

В программе организовано считывание данных с текстового файла :

char file_name[] = "C:\\korpus6.geo";

FILE* f = NULL; // файловая переменная

f = fopen(file_name, "r"); // открытие файла на чтение

.....

while( fgets(s1, 50, f) != NULL ) // s - это уже адрес

{

....

...

}

fclose(f);

Потом я ещё раз начинаю считывать данные с другого текстового файла

char file_name1[] = "C:\\78.geo";

f1 = fopen(file_name1, "r");

while( fgets(s1, 50, f1) != NULL ) // s - это уже адрес

{......

}

Вылетает сообщение "An unhandled exception of type 'System.AccessViolationException' occurred in материал.exe

Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt."

В файле altcomcli.h

указывает на строку CComBSTR& operator=(__in const CComBSTR& src)

{

if (m_str != src.m_str)

{

::SysFreeString(m_str);

m_str = src.Copy();

if (!!src && !*this)

{

AtlThrow(E_OUTOFMEMORY);

}

}

return *this;

}

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

Здравствуйте, подскажите, пожалуйста, как построить сплайн по контрольным точкам и knot. Окружность и линию строит, а сплайн не строит двумя методами. 

#include <atlbase.h>

#import "..\SolidworksApiFiles\sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids  // SOLIDWORKS type library

#import "..\SolidworksApiFiles\swconst.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids   // SOLIDWORKS constants type library

double dValue;

long iLower, iUpper;




int main()
{
	// Initialize COM
	// Do this before using ATL smart pointers so COM is available.
	CoInitialize(NULL);

	// Use a block, so the smart pointers are destructed when the scope of this block is left
	{
		// COM Pointer of Soldiworks object
		CComPtr<ISldWorks> swApp;

		// COM Pointer of Soldiworks Model Document
		CComPtr<IModelDoc2> swDoc;

		// Variable to check if function is 
		HRESULT result = NOERROR;

		// COM Style String for message to user
		CComBSTR _messageToUser;

		// long type variable to store the result value by user
		long _lMessageResult;

		// Create an instance of Solidworks application
		// If it fails then return 0 and close program
		if (swApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER) != S_OK)
		{
			// Stop COM 
			CoUninitialize();
			return(0);
		}

		// COM Style String to store document type
		CComBSTR _documentType;

		// Get the Default Part document
		swApp->GetUserPreferenceStringValue(swUserPreferenceStringValue_e::swDefaultTemplatePart, &_documentType);

		// Create a new Part Document 
		result = swApp->INewDocument2(_documentType, 0, 0, 0, &swDoc);

		// If there are no Default Part document assign then show a message to user
		// and Stop COM, Visible the Solidworks and return the function
		if (result != S_OK)
		{
			// COM Style String for message to user
			_messageToUser = (L"Failed to open document.\nPlease try again.");

			// Send a message to user and store the return value in _lMessageResult by referencing it
			swApp->SendMsgToUser2(_messageToUser, swMessageBoxIcon_e::swMbInformation, swMessageBoxBtn_e::swMbOk, &_lMessageResult);


			// Visible the Solidworks
			swApp->put_Visible(VARIANT_TRUE);

			// Stop COM 
			CoUninitialize();
			return(0);
		}


		IModelDoc2 *swModel;

		HRESULT hres = swApp->get_IActiveDoc2(&swModel);

		if (swModel == NULL)

		return 1;

		ISketchManager *swSketchMgr;

		hres = swModel->get_SketchManager(&swSketchMgr);

		double Ctrl[18];

		Ctrl[0] = 0.0;
		Ctrl[1] = 0.0;
		Ctrl[2] = 0.0;

		Ctrl[3] = 0.1;
		Ctrl[4] = 0.05;
		Ctrl[5] = 0.0;

		Ctrl[6] = 0.2;
		Ctrl[7] = 0.2;
		Ctrl[8] = 0.0;

		Ctrl[9] = 0.3;
		Ctrl[10] = 0.25;
		Ctrl[11] = 0.0;

		Ctrl[12] = 0.4;
		Ctrl[13] = 1.25;
		Ctrl[14] = 0.0;

		Ctrl[15] = 0.5;
		Ctrl[16] = 4.25;
		Ctrl[17] = 0.0;

		long Props[4];
		Props[0] = 3;
		Props[1] = 6;
		Props[2] = 6;
		Props[3] = 0;

		double Knot[12];
		
		Knot[0] = 0.0;
		Knot[1] = 0.0;
		Knot[2] = 0.0;
		Knot[3] = 0.0;
		Knot[4] = 0.0;
		Knot[5] = 0.0;
		Knot[6] = 1.0;
		Knot[7] = 1.0;
		Knot[8] = 1.0;
		Knot[9] = 1.0;
		Knot[10] = 1.0;
		Knot[11] = 1.0;
		
		ISketchSegment *swSketchSegment;

		hres = swSketchMgr->CreateCircleByRadius(0.15, 0.05, 0.0, 0.01, &swSketchSegment);  //OK
		hres = swSketchMgr->CreateLine(0.0, 0.0, 0.0, 0.0, 0.05, 0.0, &swSketchSegment);  //OK
		hres = swSketchMgr->ICreateSplineByEqnParams(Props, 12, Knot,6, Ctrl, &swSketchSegment);//false

		IModeler *Modeler;
		hres = swApp->IGetModeler(&Modeler);
		ICurve *curve;
		hres = Modeler->ICreateBsplineCurve(Props, Knot, Ctrl, &curve);//false

		// If created successfully, then visible the Solidworks
		swApp->put_Visible(VARIANT_TRUE);
	}

	// Stop COM 
	CoUninitialize();


}

 

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • ДОБРЯК
      Прочитайте здесь про давление https://ru.wikipedia.org/wiki/%D0%94%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BC%D0%B0%D0%B3%D0%BD%D0%B8%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F Обратите внимание на эту формулу Если свет падает под углом θ к нормали, то давление можно выразить формулой. Видите  в формуле cosθ? Это угол между направлением давления и нормалью.   Величина давления зависит от направления. :=) Будете и дальше про психушку рассказывать? Или будете доказывать, что это угол между нормалью и скалярным))) давлением? :=) 
    • Artas28
      NX и Powershape открыли как единую сетку. А вот SolidWorks открыл файл как 3Д модель, с кучей элементов. Удалил лишнее и получил нужную деталь. Чудеса.
    • lem_on
      Так до них через прокладки надо добиратся, а они подводят. Я синумерик хотел онлайн, но воть!!!
    • Dmitry777
      Подскажите, есть такая задача, оптимизировать внутренности диффузора так, чтобы на выходе из него направление струи было близким к горизонтальному. Как это сделать? На данный момент я задаю параметрическое исследование с изменением положений деталей в диффузоре и смотрю на графике траекторию потока. А можно как-то задать именно в искомом, направление струи в горизонтальном направлении или с каким-то отклонением от него и чтобы расчет с изменениями проходил до того момента, пока струя не будет в этом диапазоне ?
    • gudstartup
      Менеджеры вас учить не будут а преподаватели там хорошие @Viktor2004 обучение понравилось... Всему сразу научить нельзя надо к этому вопросу поэтапно подходить... Пусть автор опроса озвучит чему конкретно он хочет научиться а для начала руководство по эксплуатации станка почитает и я уверен что многое прояснится
    • lem_on
      Обращался я туда, либо мне менеджер туповатая попалась, либо да. Спрашиваешь одно, присылают вообще левую инфу. На запрос поменять менеджера, сказала что другие работают так же и вообще сам дурак. 
    • david1920
      Я понял что ему не кабель а пульт надо Я это к тому что ему от простого станка не подойдёт
    • gudstartup
      так автору пульт нужен а не кабель а протокол и отпечатки пальцев на кнопках пусть  СК интересуется с целью выяснения кто же работает на этих вражеских станках несмотря на санкции и как с этими санкциями бороться 
    • gudstartup
      Руководства @Артём 12334 ежели языками  не владеете то ищите на русском в инете этого добра хватает.  Если хотите курсы тогда в Становление а если вебинары тогда в ютюб.
    • david1920
      Вы бы конкретизировали свои потребности
×
×
  • Создать...