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

Разработка приложения под 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 пользователей

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




  • Сообщения

    • gudstartup
      @gudi продублировали ответы по теме а зачем неясно....
    • ANT0N1DZE
      Упрощенный план действий: Начните со стр. 155 https://www.utgt73.ru/uploads/biblioteka/fizika 10.pdf Если будет вращаться быстро и не в вакууме, то надо будет учесть "парус" этого тела, там сопротивление газа зависит от скорости движения. Это уже примерно 1 курс университета (тоже гуглится спокойно). 
    • MagicNight
      Заметил такую особенность, что в PowerMill v6 (возможно и в других тоже) происходит следующее... Создаю NC-файл и туда сбрасываю траектории (около 10-15 на разные фрезы), на выходе некоторые траектории не прописывает вкл охлаждения. То есть в графе Охлаждение на одну из 10-15 траекторий пишет НЕТ, на всех остальных -Стандартное (то есть да) Получается, что из, условно десяти траекторий, одна или две прописываются без включения СОЖ. Но что интересно по отдельности программы выходят с включенной СОЖ, всегда! Не могу понять зависимость с этим. Кто-нибудь сталкивался с этим?
    • ЮрЮрыч
      Вам нужно просто общее количество или оптимальную раскладку для резки наподобии нестинга?
    • Jesse
      да. Забыл добавить. Я там в тестовом примере ещё сверху шум накинул небольшой амплитуды, в 10 раз меньше чем основной сигнал. Если шум убрать, то получится что амплитуда дискретного фурье спектра растёт примерно в sqrt(N2/N1) раз, где N2 - число отсчётов для правого графика, а N1 - для левого. Но не суть.. Мой главный вопрос как получить "рабочую", правильную амплитуду DFT, которую можно было бы вбить в прогу?   не, у меня более простой второй вариант) вот когда скажут заморочиться с ансамблем и случайными процессами, тогда и будуда и комиссии если что-то подобное пробубнить, то мне точно прилетит..   Harmonic Response. На резонанс проверить.   вот сейчас только в голову пришло! Там ведь поправочные коэффы в DFT используются! Типа 1/sqrt(2*Pi) чё т такое. Пойду курить вольфрам
    • Orchestra2603
      Я, честно скажу, не знаю как на практике это проходит, что в нормах пишут и т.д. Стоит задача провести вероятностный анализ (вероятност ьпревышения пределеа текучести, например), или надо просто посчитать динамику на одну вот эту вот историю ускорений, и все? Второй вариант проще, но по-правильному, наверное надо, как в первом варианте.   а какой анализ вы хотите делать?   Если больше отсчетов по частоте, то повышается разрешение в частотной области, и просто пик становится более резким. В предельном случае будет просто одно значение в районе частоты действия силы, а вокруг него везде нули. Но, когда разрешение падает, то амплитуда с пика "сползает" и "растекается" на соседние частоты. Но сама сумма в силу равенства Парсеваля, как вы правильно сказали,  должна быть такой же.   Это очень странно. Впечатление такое, что как будто где-то какой-то косяк с БПФ. Если в начале во времени был синус с амплитудой 1, то на спектр еможет быть 1 (если однсторонний спектр), либо 1/2, если двухстронний спектр. Может, оконная функция какая-то странная? Надо разбираться...  Так а если он задаст на уровне земли как кинематическое возбуждение опорного контура? Вроде же норм... Или речб о том, чтобы убрать из модели опорную конструкцию, на которой держится оборудовнаие?
    • Борман
      и не только. При отсутствии отраслевого ГОСТа, пользуйтесь СП 14.13330.2018. Там найдете нужные коэффициенты.
    • Jesse
      у нас по НП-068-05 в отсутствие акселерограмм и спектров ответа и на 3g трясут.. мне тоже один мужик с испытательного центра посоветовал типа "бери максимум с акселерограммы да и всё". Максимум в районе 0.5g и получается   имеете в виду, что если оборудование расположено выше, то там и ускорение больше будет?
    • serg-nn
      Подскажите новичку что не так в этой программе. Деталь простая, на выходе получается полная ерунда- фасок нет, качество поверхности жуткое, самый малый диаметр вообще накатан. В симуляции , что в станке, что в программе все хорошо. Считаю по формулам- подачи сходятся... УП https://cloud.mail.ru/public/XUNu/xwkFybupZ https://ibb.co/zfZVSsL
    • Борман
      Вот вам 0,4 Надо задавать с графика выше в этом посте. Но это ускорение на поверхности земли. Надо его превратить в расчетное ускорение.
×
×
  • Создать...