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

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

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




  • Сообщения

    • jtok
      Он сильно зависит от марки PP, от расчетной температуры и от расчетного срока службы (количества циклов нагружения). Поищите стандарт DVS 2205, части 1 и 2. В нем есть номограммы долговременной прочности. Он на немецком, но ничего лучше нет. Номограммы эти приведены по ссылке, внизу страницы, раздел "Список приложений".  Например, диаграмма для PP type 1 по ссылке: В оригинале же выглядят они вот так (для PP type 1): Также был древний документ на русском по этой теме, прицеплен к сообщению. _raschet_emkosti DVS 2205-2.pdf
    • Andrey_kzn
      - тут возможно смысл сообщения в том, что оси не синхронизированы, только вот зачем синхронизировать  оси X и Y не понятно. В случае двух шпинделей например,  coupled будет означать синхронизацию.
    • niagara39
      Правильно ХУ на этом станке не перпендекулярны. Тормоз оси У включен постоянно, отключается только при перемещении самой оси У. Координаты не  меняются... Знать бы что за параметры, пока ничего подобного не нашли
    • nicomed
      Поднял старые записи. Из того что было максимально похоже на то, что можно было назвать "получалось" :   Самому не совсем понятно поведение СкетчМенеджера при отрисовке линии от координат 0,0,0 - частенько слетает в произвольное место на виде. 
    • maxx2000
      на втором  скрине PLC сообщает что-то типа "старт программы запрещён потому что оси ХУ не связаны". Возможно станок в режиме точения должен заблокировать перемещение У, включить тормоз или что-то ещё для произвольного смещения под нагрузкой. Возможно косяк в тексте программы.
    • maxx2000
      @sneg0vik как это? Если ХУ не перпендикулярны то это уже не У, а скажем ось В. Нет, конечно в теории можно построить станок с неперпендикулярными ХУ. Вопрос зачем? Gildemeister CTX 420 это же токарно-фрезерный с осью У
    • sneg0vik
      На станке ось "X" является наклонной по отношению к оси "Y" (т. е. они не перпендикулярны). Поэтому надо полагать (учитывая текст ошибки) у вас отключена связь оси "Y" с осью "X".   Проверьте меняются ли координаты оси "X", когда вы двигаете ось "Y". И наоборот. Если - нет, то ищите как включить (наверное через параметры) взаимосвязь оси "Y" с осью "X".
    • ДОБРЯК
      Если ваш Заказчик и такую работу примет, то необходимо в шпоночное отверстие добавить и массу воды. Примерно 1/4 от той массы которую вы будете добавлять.  Да и еще и не забыть добавить момент инерции от воды.
    • Soprin
      В функции MOVE по F7.3 должно же из R270 переносить в R278?
    • niagara39
      Причина все еще не найдена... Но заметил, что сразу после включения в меню диагностики появляется следующее предупреждающее сообщение: 10155 M: Y-axis: Y-axis and X-axis not coupled , но причина его появления и его смысл неизвестны
×
×
  • Создать...