Правильное обращение к функции С++, Компас

Автор NikSis, 16.10.18, 22:31:22

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

NikSis

Подскажите не понимающему. Есть код, при на жатии на кнопку в диалоге которого запускается Компас и создается документ детали.

void ShpeelDlg::OnBnClickedButton1()
{
//Запускаем КОМПАС
KompasObjectPtr kompas2;
if (kompas2 == NULL)
{
kompas2.CreateInstance(L"KOMPAS.Application.5");
}

if (kompas2 !=  NULL)
{
kompas2->Visible = true;
}
ksDocument3DPtr Document3D;
if (kompas2 != NULL)
{
Document3D = (ksDocument3DPtr)kompas2->Document3D();
Document3D->Create(false, TRUE);
}
}


И имеется функция при которой строиться сама деталь.

void CreateExtrusion(IPartPtr& part, IDocument3DPtr & pDocument3d)
{
// Создадим новый эскиз
IEntityPtr entitySketch(part->NewEntity(o3d_sketch), false /*AddRef*/);
if (entitySketch)
{
// Получить указатель на интерфейс параметров объектов и элементов
ISketchDefinitionPtr sketchDefinition(IUnknownPtr(entitySketch->GetDefinition(), false /*AddRef*/));
if (sketchDefinition)
{
// Получим интерфейс базовой плоскости XOY
IEntityPtr basePlane(part->GetDefaultEntity(o3d_planeXOY), false /*AddRef*/);

// Установка параметров эскиза
sketchDefinition->SetPlane(basePlane); // Установим плоскость XOY базовой для эскиза
sketchDefinition->SetAngle(45);        // Угол поворота эскиза
   // Создадим эскиз
entitySketch->Create();
// Войти в режим редактирования эскиза
if (sketchDefinition->BeginEdit())
{
// Введем новый эскиз - квадрат
LineSeg(50, 50, -50, 50, 1);
LineSeg(50, -50, -50, -50, 1);
LineSeg(50, -50, 50, 50, 1);
LineSeg(-50, -50, -50, 50, 1);
// Выйти из режима редактирования эскиза
sketchDefinition->EndEdit();
}
// Оперция выдавливани
IEntityPtr entityExtrusion(part->NewEntity(o3d_bossExtrusion), false /*AddRef*/);
if (entityExtrusion)
{
// Интерфейс базовой операции выдавливания
IBossExtrusionDefinitionPtr extrusionDefinition(IUnknownPtr(entityExtrusion->GetDefinition(), false/*AddRef*/));
if (extrusionDefinition)
{
extrusionDefinition->SetDirectionType(dtNormal);     // Направление выдавливания ( dtNormal - прямое
extrusionDefinition->SetSideParam(true,etBlind,200,0,false);       
extrusionDefinition->SetThinParam(true,dtBoth,10,10);             
extrusionDefinition->SetSketch(entitySketch);        // Эскиз операции выдавливания
entityExtrusion->Create(); // Создать операцию выдавливания
}
}
}
}
}


Ни как не могу понять как правильно вставить эту функцию в 1 код. Что бы при нажатии на кнопку не только открывался Компас, но и сразу строилась деталь.
Заранее благодарен за ответ.

Sabahs

17.10.18, 06:06:27 #1 Последнее редактирование: 17.10.18, 06:19:37 от Sabahs
В конце функции после создания документа, получить ksPartPtr и вызвать функцию CreateExtrusion передав в неё необходимые параметры.
ksPartPtr part( Document3D->GetPart(pTop_Part) ); // новый компонент

NikSis

Цитата: Sabahs от 17.10.18, 06:06:27
В конце функции после создания документа, получить IPartPtr и вызвать функцию CreateExtrusion передав в неё необходимые параметры.


Это я понимаю, я кокрас и не понимаю какие "необходимые параметры" надо задать. Не могли бы вы показать как правильно. с какими параметрами, вызывать функцию?

Sabahs

Входные в функции, они в скобках.

NikSis

Цитата: Sabahs от 17.10.18, 06:22:10
Входные в функции, они в скобках.


Как я понял, вызываться функция должна как то так. Но это не срабатывает. Компас по прежнему запускается, создается документ детали и все. Хотя должна еще сама деталь строиться.

void ShpeelDlg::OnBnClickedButton1()
{

//Запускаем КОМПАС
KompasObjectPtr kompas2;

if (kompas2 == NULL)
{
kompas2.CreateInstance(L"KOMPAS.Application.5");
}

if (kompas2 !=  NULL)
{
kompas2->Visible = true;
}
ksDocument3DPtr Document3D;
if (kompas2 != NULL)
{
Document3D = (ksDocument3DPtr)kompas2->Document3D();
Document3D->Create(false, true);

//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CreateExtrusion((IPartPtr)Document3D->GetPart(pTop_Part), (IDocument3DPtr)Document3D);


}

}

Sabahs

17.10.18, 10:24:09 #5 Последнее редактирование: 17.10.18, 15:00:13 от Sabahs
Почему IPartPtr и IDocument3DPtr, где Вы их взяли?
Используете API5, так и используйте его.
Неужели тяжело пример посмотреть - SDK\Samples\C++\VisualcAUTO\step3d1\step3D1.cpp.