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

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

Сделал макрос под себя для заполнения рамки.

Посмотри темы: может и писать ничего не надо:

<noindex>http://fsapr2000.ru/index.php?showtopic=6622</noindex>

<noindex>http://fsapr2000.ru/index.php?showtopic=6071</noindex>

Ну и эту почитать.

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


Добрый вечер. Помогите разобраться. Есть простая деталь в SolidWorks(вытянутый прямоугольник). Есть задача - нужно посредством API через Visual Studio(c++) изменять размеры прямоугольника который вытягиваем и длины, на которую вытягиваем. Нашел много примеров Visual Basic, там это реализовывается просто, мне кажется на с++ не сложнее, но ничего не получается. Гугл ничего толкового не дал, или я искать не умею...

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

Dedg

Получаете COM object и с ним работайте

<noindex>http://help.solidworks.com/2012/english/ap...pplications.htm</noindex>

Получаете модель

Если размер надо выделить:

Получаете объект размера getselectedobject

Если надо найти по имени:

selectbyID

Изменяете value

как пример: <noindex>http://help.solidworks.com/2012/english/ap..._example_vb.htm</noindex>

Гугл ничего толкового не дал

Надо, не ... не так... НАДО ЧИТАТЬ ХЕЛП!!! во

Там есть всё.

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

Получаете модель

Если размер надо выделить:

Получаете объект размера getselectedobject

Если надо найти по имени:

selectbyID

Изменяете value

как пример: <noindex>http://help.solidworks.com/2012/english/ap..._example_vb.htm</noindex>

Надо, не ... не так... НАДО ЧИТАТЬ ХЕЛП!!! во

Там есть всё.

Я видел этот пример, но там на VB. Вот тут то и возникла проблема. Я не могу понять как на С++ это записать

CoInitialize(NULL);

СComPtr<ISldWorks> swApp;

CComPtr<IModelDoc2> swModel;

а дальше загруз...

Set Dimension = Part.Parameter("XValue@Sketch1")

Dimension.SystemValue = XValue_Passed

Part.EditRebuild3

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

Dedg

а дальше собсно язык C++ )))

в том то и проблема(

основы по С++ есть, но вот с API не задалось.

Может кто знает, покажите пример, очень нужно. Заранее благодарен.

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

Dedg

упорно не хотите читать ХЕЛП?

<noindex>http://help.solidworks.com/2012/english/ap...pplications.htm</noindex>

Запуск SW

CComPtr<ISldWorks> swApp;

	CComPtr<IModelDoc2> swModel;

	HRESULT hres = NOERROR;



	CoInitialize(NULL);

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

	hres = swApp->put_UserControl(VARIANT_TRUE);

	hres = swApp->put_Visible(VARIANT_TRUE);

	hres = swApp->get_IActiveDoc2(&swModel);

	CoUninitialize();

основы по С++ есть

Мало. Прочтите "Модель COM и применение ATL 3.0" Троельсена. Очень многое станет понятно. Достаточно просто прочитать)))
Ссылка на сообщение
Поделиться на других сайтах

Запуск SW

CComPtr<ISldWorks> swApp;

	CComPtr<IModelDoc2> swModel;

	HRESULT hres = NOERROR;



	CoInitialize(NULL);

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

	hres = swApp->put_UserControl(VARIANT_TRUE);

	hres = swApp->put_Visible(VARIANT_TRUE);

	hres = swApp->get_IActiveDoc2(&swModel);

	CoUninitialize();
а как открыть файл?

swModel = swApp->OpenDoc2(L"Путь:\\Деталь.SLDPRT", 1, false, false, false, false, 0); не работает, выдает ошибку

Изображение

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

OpenDoc2(L"Путь:\\

)))) смешно

основы по С++ есть

продолжаем по основам "http://netcode.ru/cpp/?lang=&katID=6&skatID=55&artID=2475"

CComBSTR sCompName(L"c:\\sheet metal exam.SLDPRT");

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

swModel = swApp...

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

)))) смешно

я старался) я думаю Вы поняли у меня там полный путь прописан, а тут я просто указал что писать там буду)

продолжаем по основам "http://netcode.ru/cpp/?lang=&katID=6&skatID=55&artID=2475"

хм, я ж так и написал? нет?

не верится мне что так нужно

swApp->OpenDoc2(SysAllocString(L"C:\\Users\\Eclipse\\Desktop\\Деталь1.SLDPRT"), 1, false, false, false, false, 0);

CComBSTR sCompName(L"c:\\sheet metal exam.SLDPRT");

hres = swApp->OpenDoc6(sCompName, swDocPART, swOpenDocOptions_Silent, sDefaultConfiguration, &lErrors, &lWarnings, &tmpObj);
вы знаете же что такое указатели и ссылки? да?
функцию открытия OpenDoc2 брал с примера на VB и изменил(наверно не правильно) для С++...
Ссылка на сообщение
Поделиться на других сайтах

Dedg

возвращайте всё время HRESULT. Будете знать как именно вернулось))

По теме OpenDoc2:

IDispatch *tmpObj; //Искомая модель, как её привести к IModelDoc не знаю

hres = swApp->OpenDoc2(sCompName, swDocPART, VARIANT_FALSE, VARIANT_FALSE, VARIANT_TRUE, &lErrors, &tmpObj);
Честно, я первый раз открыл хелп на тексте "открыть документ в С++".

Вот только не спрашивайте теперь про IDispatch )))

VARIANT_FALSE - почему так, читать про модель COM)))

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

Пример вытягивания прямоугольника... Начальные условия : должен быть открыт документ детали. Только пример.

#include "stdafx.h"



#import "sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids  //the SolidWorks type library

#import "swconst.tlb"  raw_interfaces_only, raw_native_types, no_namespace, named_guids  //the SolidWorks constant type library



int _tmain(int argc, _TCHAR* argv[])

{

	HRESULT hres;

	CComBSTR message;

	long lres;



	CoInitialize(NULL);

	CLSID clsid;

	CLSIDFromProgID(L"SldWorks.Application", &clsid);

	

	ISldWorks *swApp;

	CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, __uuidof(ISldWorks), (void**)&swApp);

	if(swApp == NULL)

	{

		::CoUninitialize();

		return 1;

	}

	IModelDoc2 *swModel;

	hres = swApp->get_IActiveDoc2(&swModel);

	if(swModel == NULL)

	{

		message = L"Загрузите документ SolidWorks-а!";

		hres = swApp->SendMsgToUser2(message, swMbWarning, swMbOk, &lres);

		::CoUninitialize();

		return 1;

	}



	long docType;

	hres = swModel ->GetType(&docType);

	if(docType != swDocPART)

	{

		message = L"Функция работает только с документом детали (*.sldprt)!";

		hres = swApp->SendMsgToUser2(message, swMbWarning, swMbOk, &lres);

		::CoUninitialize();

		return 1;

	}

	IModelDocExtension *swModelExt;

	hres = swModel->get_Extension(&swModelExt);



	IFeatureManager *swFeatMgr;

	hres = swModel->get_FeatureManager(&swFeatMgr);



	ISketch *swSketch;

	hres = swModel->IGetActiveSketch2(&swSketch);



	VARIANT_BOOL bres;

	if(swSketch == NULL)

	{

		// здесь, в первом аргументе, ввести коррекное имя плоскости на которой будет рисоваться эскиз

		hres = swModelExt->SelectByID2(L"Font Plane", L"Plane", 0.0, 0.0, 0.0, VARIANT_FALSE, 0, NULL, swSelectOptionDefault, &bres);

		hres = swModel->InsertSketch2(VARIANT_TRUE);

	}



	ISketchManager *swSketchMgr;

	hres = swModel->get_SketchManager(&swSketchMgr);



	// рисуем прямоугольник со сторонами 200 х 150мм

	VARIANT vSketchSegment;

	hres = swSketchMgr->CreateCenterRectangle(0.0, 0.0, 0.0, 0.2, 0.125, 0, &vSketchSegment);



	// Вытягиваем этот прямоугольник на расстояние 50мм

	IFeature *swFeature;

	hres = swFeatMgr->FeatureExtrusion2(VARIANT_TRUE, VARIANT_FALSE, VARIANT_FALSE, swEndCondBlind, 0, 0.050, 0.0, 

										VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE, 0.0, 0.0,

										VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE,

										VARIANT_TRUE, VARIANT_FALSE, VARIANT_TRUE, 0, 0.0, VARIANT_FALSE, &swFeature);

	::CoUninitialize();

	return 0;

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

Пример вытягивания прямоугольника... Начальные условия : должен быть открыт документ детали. Только пример.

#include "stdafx.h"



#import "sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids  //the SolidWorks type library

#import "swconst.tlb"  raw_interfaces_only, raw_native_types, no_namespace, named_guids  //the SolidWorks constant type library



int _tmain(int argc, _TCHAR* argv[])

{

	HRESULT hres;

	CComBSTR message;

	long lres;



	CoInitialize(NULL);

	CLSID clsid;

	CLSIDFromProgID(L"SldWorks.Application", &clsid);

	

	ISldWorks *swApp;

	CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, __uuidof(ISldWorks), (void**)&swApp);

	if(swApp == NULL)

	{

		::CoUninitialize();

		return 1;

	}

	IModelDoc2 *swModel;

	hres = swApp->get_IActiveDoc2(&swModel);

	if(swModel == NULL)

	{

		message = L"Загрузите документ SolidWorks-а!";

		hres = swApp->SendMsgToUser2(message, swMbWarning, swMbOk, &lres);

		::CoUninitialize();

		return 1;

	}



	long docType;

	hres = swModel ->GetType(&docType);

	if(docType != swDocPART)

	{

		message = L"Функция работает только с документом детали (*.sldprt)!";

		hres = swApp->SendMsgToUser2(message, swMbWarning, swMbOk, &lres);

		::CoUninitialize();

		return 1;

	}

	IModelDocExtension *swModelExt;

	hres = swModel->get_Extension(&swModelExt);



	IFeatureManager *swFeatMgr;

	hres = swModel->get_FeatureManager(&swFeatMgr);



	ISketch *swSketch;

	hres = swModel->IGetActiveSketch2(&swSketch);



	VARIANT_BOOL bres;

	if(swSketch == NULL)

	{

		// здесь, в первом аргументе, ввести коррекное имя плоскости на которой будет рисоваться эскиз

		hres = swModelExt->SelectByID2(L"Font Plane", L"Plane", 0.0, 0.0, 0.0, VARIANT_FALSE, 0, NULL, swSelectOptionDefault, &bres);

		hres = swModel->InsertSketch2(VARIANT_TRUE);

	}



	ISketchManager *swSketchMgr;

	hres = swModel->get_SketchManager(&swSketchMgr);



	// рисуем прямоугольник со сторонами 200 х 150мм

	VARIANT vSketchSegment;

	hres = swSketchMgr->CreateCenterRectangle(0.0, 0.0, 0.0, 0.2, 0.125, 0, &vSketchSegment);



	// Вытягиваем этот прямоугольник на расстояние 50мм

	IFeature *swFeature;

	hres = swFeatMgr->FeatureExtrusion2(VARIANT_TRUE, VARIANT_FALSE, VARIANT_FALSE, swEndCondBlind, 0, 0.050, 0.0, 

										VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE, 0.0, 0.0,

										VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE,

										VARIANT_TRUE, VARIANT_FALSE, VARIANT_TRUE, 0, 0.0, VARIANT_FALSE, &swFeature);

	::CoUninitialize();

	return 0;

}
Этот вариант работает, но задача у меня немного не такая. Нужно изменять готовое. Мне кажется это можно сделать так:

hres = swModel->Parameter(L"D2@Эскиз1", IDispatch ** Retval);

IDispatch ** Retval - не пойму что тут писать и как задать нужный размер

возможно так?

IDispatch *swParameter;

hres = swModel->Parameter(L"D1@Эскиз1", &swParameter);

Но как поменять value..

hres = swParameter->

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

я хоть в том направлении иду?

Немного разобрался

IDimension *swParam;

long ret;

VARIANT_BOOL bre;

hres = swModel->IParameter(L"D1@Эскиз1", &swParam);

hres = swParam->SetSystemValue2(0.5, 0, &ret);

hres = swModel->ForceRebuild3(false, &bre);

не пойму только что хранят эти переменные

long ret;

VARIANT_BOOL bre;

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

Немного разобрался

Примерно так. Только я чаще использую функцию SetValue3

Скрытый текст: Код

#include "stdafx.h"



#import "sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids  //the SolidWorks type library

#import "swconst.tlb"  raw_interfaces_only, raw_native_types, no_namespace, named_guids  //the SolidWorks constant type library







int _tmain(int argc, _TCHAR* argv[])

{

	CLSID clsid;

	CLSIDFromProgID(L"SldWorks.Application", &clsid);

	HRESULT hres;



	CoInitialize(NULL);



	ISldWorks *swApp = NULL;

	::CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, __uuidof(ISldWorks), (void**)&swApp);



	if(swApp == NULL)

	{

		CoUninitialize();

		return 1;

	}

	hres = swApp->put_Visible(VARIANT_TRUE);



	CComBSTR bstrFileName(L"g:\\Part_Example.SLDPRT"); // это у меня для примера

	CComBSTR bstrConfig(L"Default"); // это у меня для примера



	long lError, lWarning;

	IModelDoc2* swModel = NULL;

	hres = swApp->OpenDoc6(bstrFileName, swDocPART, swOpenDocOptions_Silent, bstrConfig, &lError, &lWarning, &swModel);

	if(swModel == NULL)

	{

		CoUninitialize();

		return 1;

	}



	// Имена размеров прямоугольника..

	CComBSTR bstrWidth = L"D1@Sketch1";

	CComBSTR bstrHeight = L"D2@Sketch1";

	CComBSTR bstrLength = L"D1@Boss-Extrude1";



	// новые размеры прямоугольника

	double dWidth = 80.0;

	double dHeight = 90.0;

	double dLength = 150.0;



	CComBSTR configNames = L"";



	// ===  Изменение размеров детали =================

	try

	{

		long lres;

		IDimension* swDimension = NULL;

		hres = swModel->IParameter(bstrWidth, &swDimension);

		hres = swDimension->ISetValue3(dWidth, swSetValue_InAllConfigurations, 0, &configNames, &lres);



		hres = swModel->IParameter(bstrHeight, &swDimension);

		hres = swDimension->ISetValue3(dHeight, swSetValue_InAllConfigurations, 0, &configNames, &lres);



		hres = swModel->IParameter(bstrLength, &swDimension);

		hres = swDimension->ISetValue3(dLength, swSetValue_InAllConfigurations, 0, &configNames, &lres);				

	}

	catch(...){}

	// ===============================================



	VARIANT_BOOL bres;

	hres = swModel->EditRebuild3(&bres);



	hres = swModel->SetSaveFlag();



	CoUninitialize();

	return 0;

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

как в c++ методами API открыть Solid Works

на delphi у меня запуск получается

strDir:string; // текущая директория программы

pFeature:variant; //

iFaceCount:integer; //

aArrToFaces:variant; //

vSelMng:variant;

vSelData:variant;

vEdgesArr:variant;

{-^main program^-}

begin

{ обработчик исключительных ситуаций для корректного запуска SW или

подключения к уже открытой сессии }

try

{ если SW уже запущен - то получаем указатель на сессию SW в

переменную swApp }

swApp:=GetActiveOleObject('SldWorks.Application');

except

{в обратном случаем - создаем новую сессию - и заносим указатель

на нее в переменную }

swApp:=CreateOleObject('SldWorks.Application');

end;

{ теперь можно обращаться к методам, которые инкапсулирет объект -

SldWorks OLE-сервера SW , например

swApp.<имя метода>([параметры метода - если есть]),

}

{получаем в пременную strDir - путь к директории, где запущена программа}

GetDir(0,strDir);

{ создаем новый документ SW типа "ДЕТАЛЬ" по шаблону, находящемуся в

текущей директории, по аналогии можно создавть документы типа "Сборка"

по шаблону в \..\SolidWorks\data\templates\Сборка.prtdot}

swApp.NewDocument(strdir+'\'+'Деталь.prtdot', 0, 0, 0);

{ свойство visible объекта SldWorks отвечает за видимость запущенной сессии

(процесса) SW - - true - отобразить SW }

swApp.visible:=true;

{ получаем указатель в ModDoc на текущий открытый документ - получаем возможность

работы с с методами объекта ModelDoc2 }

ModDoc:=swApp.ActiveDoc;

{ вставляем в текущий документ новый эскиз - вызов метода

объекта ModelDoc -> InsertSketch2 }

ModDoc.InsertSketch2(true);

как сделать так на С++

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

dracondo

Элементарно))) Создать экземпляр, получить указатель и вставить функции из хелпа))

Создание обычного exe _http://help.solidworks.com/2013/English/api/sldworksapiprogguide/GettingStarted/CPP_.NET_Standalone_and_Add-in_Applications.htm?id=cfde5f40045246208143e62b1b02698c#Pg0

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

Здравствуйте, а подскажите какой функцией отобразить конкретные скрытые размеры на чертеже. В справке по этому вопросу нашел только HideShowDimensions. Но это отображение ВСЕХ скрытых размеров, при чем, чтобы их отобразить необходимо повторно на них нажимать, а как просто отобразить конкретный скрытый размер на чертеже.

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

NUMPL

Пример тут _http://help.solidworks.com/2011/English/api/sldworksapi/Show_Dimensions_in_Drawing_Sheet_Example_VB.htm

Основной смысл: размер в чертеже получать как Annotation и с ней работать

Set swAnn = swView.GetFirstAnnotation2

Do While Not Nothing Is swAnn

If swDisplayDimension = swAnn.GetType Then
_http://help.solidworks.com/2011/English/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iannotation~visible.html

отобразить конкретный скрытый размер

нужно как минимум знать его имя, это можно сделать перебором. Допустим: вы получаете все аннотации на виде и вызываете Message с кнопками, если ОК - отобразить, если Cancel - то продолжить перебор.
Ссылка на сообщение
Поделиться на других сайтах

streamdown

Немного не сориентируюсь. Если имя размера на чертеже d1@эскиз1, то каким образом ему Visible прописать.

Sub main()Set swApp = Application.SldWorksSet Part = swApp.ActiveDocDim swModel As SldWorks.ModelDoc2Dim swView As SldWorks.ViewDim swAnn As SldWorks.AnnotationSet swAnn = swView.GetFirstAnnotation2Do While Not Nothing Is swAnn        If swDisplayDimension = swAnn.GetType Then            Debug.Print "    " & swAnn.GetName                    swAnn.Visible = swAnnotationVisible        End If             Set swAnn = swAnn.GetNext2    LoopEnd Sub

swAnn.Visible = true должна быть последняя фраза, как я понимаю, а swAnn должно должно соответствовать размеру d1@эскиз1.

На фразе Set swAnn = swView.GetFirstAnnotation2 выдает 91 ошибку

Object variable or With block variable not set

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • lexx174
    • Snake 60
      Иногда в этом нет необходимости, особенно когда это касается покупной детали, масса которой известна, а нарисована она схематически или упрощенно. Допустим если конструктор захочет дорисовать что-то более подробно, то масса такой детали измениться, а это будет не соответствовать действительности и не всегда уследишь за плотностью такой детали, поэтому мое ИМХО изменение массы вручную иногда полезно и имеет место быть.
    • Killerchik
      Я хочу сказать, что при указанном выше перекосе невозможно будет программными компенсациями добиться перпендикулярности оси шпинделя к поверхности стола и, как следствие, к поверхности детали, притянутой к столу. Как следствие мы получаем неисправимый перекос отверстий при расточке и столь же неисправимый перекос при обработке плоскостей торцом вращающегося инструмента: торцевыми фрезами, чашечными шлифовальными кругами, однозубыми фрезами летучками.
    • Kelny
      Если узел взвешен, то подгоните плотность, это будет лучше соответствовать взвешенному узлу. Заодно проверьте все входящие детали: правильно ли задан материал или плотность, нет ли ошибок в деталях при изготовлении.
    • Alexander.k
      Я новичок  моделировании, много не понимаю.    Мне нужно получить пересечение трёх выдавленных отверстий без без артефактов. Как правильно это сделать? Я попытался создать 3 эскиза по плоскостям.    И пытался выдавить. Не найдя нужного инструмента , выдавил по стеке (хотя понимаю, что это не правильно).   Естественно на пересечении появились  артефакты. Конечно можно было построить в углу шар который убрал бы артефакты. Но я уверен что делаю это не правильно и существует более простой способ. Если не сложно, подскажите пожалуйста .
    • Андрей67
      Здравствуйте! В каталогах производителей зубчатых ремней указан параметр Zmin для каждого типа ремня.     А вот как быть с минимальным охватом шкива, чтоб ремень не разрушился от максимальной нагрузки? Понятное дело, что чем больше охват тем лучше. Но должен же быть и минимум? К примеру, для профиля Т5 как знать этот параметр?
    • Guhl
      Там об этом и написано в последнем абзаце. Видим люфт, переходим в полузамкнутый, побороли люфт, переключаемся в замкнутый контур Люфты вызывают вибрацию, пожтому с ними и борятся.  Не, не, не Ты же сам сказал: я, мол, в прошлый раз бла-бла-бла, тыры-пыры А где он, этот прошлый раз? Это ж легко - взял и дал ссылку на комментарий Ох и фантазёр ты @lem_on А я тебе отвечу, не было его, этого "последнего раза", не было Пора про тебя песню сочинить Ты бы как предпочел - в миноре, аль в мажоре? Или марш сочинить, а?
    • Viktor2004
      Таблица компенсаций позволяет корректировать любую ось в любой точке в зависимости от положения остальных осей. Вот я создаю такую таблицу для компенсации Я буду вести индикатор вдоль оси Y, а компенсировать буду Иксом. Разворачиваю поворотную ось влево на 90 градусов и компенсациями выравниваю игрек за счет икса. Потом поворачиваю стол вправо на 90 градусов. А там мне нужны уже другие компенсации, не те что для минус 90. То есть таблицу я могу составить только для минус 90 либо для плюс 90. Потому что в данные компенсации я могу вносить только константы. Если бы можно было вносить формулы, эту задачу можно было бы решить
    • lem_on
      Так у тебя память как у рыбы, 3 секунды и забыл. Ну или дурака включил, что более вероятно. Так что живи с коричневым носом. Хоть нормальные люди тебя обходить будут. 
    • gudstartup
      ну я же говорю что вы основное не понимаете. функция борется не с люфтом люфт никуда не исчезает а с последствиями которые привносит люфт в полно замкнутый контур регулирования. с люфтом борется напрямую только компенсация его в полузамкнутом контуре.
×
×
  • Создать...