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

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

10.05.2023 в 03:49, ЮрЮрыч сказал:

Здравствуйте. Как определить дату создания не Солидовского файла например dxf? 

в Тотал коммандер в пользоательском столбце ставите плагин тс , ДАТА ПОСЛЕДНЕЙ МОДИФИКАЦИИ и будет счастье сортировка/фильтр и поиск по этому же значению..

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


10.05.2023 в 14:30, Kelny сказал:

Попробуйте FSO (Объект FileSystemObject):

https://www.script-coding.com/WSH/FileSystemObject.html#5.2.2.

Кто не знает что это все прикрутить можно к ТС и юзать , преименовывть, искать, сортировать.

http://wincmd.ru/plugring/WinScriptAdv.html

плагин для создания таких макросов/ скриптов

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

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

#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();


}

 

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Ludmila52 сказал:

подскажите, пожалуйста, как нарисовать сплайн по контрольным точкам

https://cccp3d.ru/topic/10584-спираль-в-эскизе/?do=findComment&comment=1344023

 

Ссылка на сообщение
Поделиться на других сайтах
33 минуты назад, Ludmila52 сказал:

Я хотел спросить почему не работают функции, которые в коде я закомментировал как //false

У вас консольное приложение. Похоже, что ваша строка hres = swSketchMgr->ICreateSplineByEqnParams(Props, 12, Knot,6, Ctrl, &swSketchSegment);//false будет работать только если вы будете писать addins.

В exe-файлах на C++ воспользуйтесь другой функцией:

VARIANT vParams;
......
hres = swSketchMgr->CreateSplineByEqnParams(vParams, &swSketchSegment);

Как упаковать ваши данные в VARIANT, надеюсь, знаете.

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

Спасибо за ответ, а что такое 

VARIANT vParams;

Как этот параметр задает 

Props, 12, Knot,6, Ctrl

?

Нет, не знаю как упаковать данные в VARIANT

Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, Ludmila52 сказал:

Нет, не знаю как упаковать данные в VARIANT

Где то так...

 

Скрытый текст




	ISketchManager *swSketchMgr;
	hres = swModel->get_SketchManager(&swSketchMgr);

	ISketchSegment *swSketchSegment;


	double Params[32];

	Params[0] = 3.0; // Dimension
	Params[1] = 4.0; // Order
	Params[2] = 6.0; //Number of Control Points
	Params[3] = 0.0; // Periodicity ( TRUE or FALSE )
	
	// KnotPts
	Params[4] = 0;
	Params[5] = 0;
	Params[6] = 0;
	Params[7] = 0;
	Params[8] = 0.362665828616751;
	Params[9] = 0.575110552411167;
	Params[10] = 1;
	Params[11] = 1;
	Params[12] = 1;
	Params[13] = 1;

	//CtrlPts
	Params[14] = -0.0508;
	Params[15] = 0.0254;
	Params[16] = 0;

	Params[17] = -0.0467151082143202;
	Params[18] = 0.0102856278912272;
	Params[19] = 0;

	Params[20] = -0.00128736279059822;
	Params[21] = -0.0242718277078294;
	Params[22] = 0;

	Params[23] = 0.0314466792227059;
	Params[24] = 0.0612396847740687;
	Params[25] = 0;

	Params[26] = 0.060476660388647;
	Params[27] = -0.0433198423870343;
	Params[28] = 0;

	Params[29] = 0.0762;
	Params[30] = 0.0254;
	Params[31] = 0;


	VARIANT vParams;
	SAFEARRAY* pSA = SafeArrayCreateVector(VT_R8, 0, 32);
	SafeArrayLock(pSA);
	for(long i = 0; i < 32; i++)
	{
		double value = Params[i];
		hres = SafeArrayPutElement(pSA, &i, (void*)&value);
	}

	
	vParams.vt = VT_ARRAY;
	vParams.parray = pSA;
	hres = swSketchMgr->CreateSplineByEqnParams(vParams, &swSketchSegment);

	SafeArrayUnlock(pSA);
	SafeArrayDestroyData(pSA);
	SafeArrayUnaccessData(pSA);

	::CoUninitialize();

	return 0;

 

 

P.S. Кстати, у вас данные какие то неправильные. Строится сплайн как прямая линия. В примере другие данные.

 

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

Здравствуйте. Вставляю блок в вид чертежа из dxf файла, некоторые блоки нужно вставлять по несколько раз. Происходит это очень долго. Хочу сделать копированием и вставкой блока. Подскажите как выделить и скопировать экземпляр блока. 

Ссылка на сообщение
Поделиться на других сайтах
22.07.2023 в 08:26, ЮрЮрыч сказал:

Хочу сделать копированием и вставкой блока.

https://help.solidworks.com/2013/English/api/sldworksapi/Create_Block_Definition_and_Insert_Block_Instance_Example_VB.htm

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

Всем привет. Подскажите пожалуйста. Можно ли заставить Api солида выполнять вычисления в фоновом режиме? Проблема заключается в скорости работы макроса. Он по факту физически строит модель , как будто бы это делает живой пользователь. Порой на исполнение кода может уходить до 10 минут, что само по себе невыносимо долго. Как бы убрать полностью все перестроения модели и мельтешения экрана? Код макроса работает в файле сборки. И покомпонентно создает с нуля структуру модели из тектового файла. А это сборки и новые компоненты, которые нужно параметризировать по размерам указанным в тектовом файле. Некоторые компоненты требуют, что бы в них была проделана операция вырезания по траектории ..Что само по себе тянет создание новых эскизов..

Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, Sla_68 сказал:

Всем привет. Подскажите пожалуйста. Можно ли заставить Api солида выполнять вычисления в фоновом режиме? Проблема заключается в скорости работы макроса. Он по факту физически строит модель , как будто бы это делает живой пользователь. Порой на исполнение кода может уходить до 10 минут, что само по себе невыносимо долго. Как бы убрать полностью все перестроения модели и мельтешения экрана? Код макроса работает в файле сборки. И покомпонентно создает с нуля структуру модели из тектового файла. А это сборки и новые компоненты, которые нужно параметризировать по размерам указанным в тектовом файле. Некоторые компоненты требуют, что бы в них была проделана операция вырезания по траектории ..Что само по себе тянет создание новых эскизов..

Здесь почитайте, должно помочь.

Ссылка на сообщение
Поделиться на других сайтах
9 часов назад, Sla_68 сказал:

Проблема заключается в скорости работы макроса.

https://cadbooster.com/improve-solidworks-macro-speed-10x/

Ссылка на сообщение
Поделиться на других сайтах
  • 4 недели спустя...
VARIANT vParams;
......
hres = swSketchMgr->CreateSplineByEqnParams(vParams, &swSketchSegment);

 

Доброе время суток!

Подскажите, пожалуйста, как удлинить сплайн, см. код выше?

ExtentCurve Method (ICurve) - 2021 - SOLIDWORKS API Help

Метод ExtentCurve требует ICurve, а у меня swSketchMgr переменная...

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

Здравствуйте, еще один вопрос: почему в solidworks покраснел сплайн? В самой программе Visual Studio C++ hres переменная возвратила S_OK, т.е. программа построения сплайна отработала нормально.

Пишет "не удается решить объект. Конфликт между объектами. Найдено недопустимое решение." И значок желтый треугольник с восклицательным знаком.

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

Нашел такой пример, только у меня не вижуал бейсик, а С++. Пока не разобрался, как это работает, к тому же у меня сплайн красный. Большая просьба помочь мне разобраться!

https://help.solidworks.com/2021/English/api/sldworksapi/Extend_Sketch_Entity_Example_VB.htm

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Ludmila52 сказал:

Нашел такой пример, только у меня не вижуал бейсик, а С++

https://help.solidworks.com/SearchEx.aspx?query=Extend Sketch Entity Example&version=2021&lang=English,enu&prod=api

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

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

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

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

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

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

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

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

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

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

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



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