Выдавливание эскиза вращением (Delphi)

Автор diadka_fedor, 24.06.15, 13:44:41

« назад - далее »

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

diadka_fedor

Здравствуйте!
Составляю программу по построению подшипника ГОСТ 8995-75. Вроде всё делаю правильно, программа запускается, строит эскиз а выполнять выдавливание вращением отказывается(причём никаких ошибок не выдает). Уже всё перерыл.
Вот код:
var
doc    : ksDocument2D;
Kompas :KompasObject;
                Document3D: ksDocument3D;
                Part: ksPart;
                EntityDraw, EntityPlane, EntityRotated, EntitySketch: ksEntity;
                BaseRotatedDefinition: ksBaseRotatedDefinition;
                SketchDefinition: ksSketchDefinition;
//pp: ksHatchParam;
begin
d:=StrToFloat(Edit1.Text); Db:=StrToFloat(Edit2.Text); B:=StrToFloat(Edit3.Text);
  r:=StrToFloat(Edit4.Text); Dw:=StrToFloat(Edit5.Text);

    if Kompas = nil then
  begin
    Kompas:= KompasObject( CreateOleObject('Kompas.Application.5') );
    if Kompas <> nil then
      Kompas.Visible := true;
  end;
  //doc   := ksDocument2D( kompas.Document2D );

      Document3D:=ksDocument3D(kompas.Document3D());

      //Создаем документ-модель
Document3D.Create(FALSE,TRUE);
//Получаем интерфейс 3D-модели
Part:= ksPart(Document3D.GetPart(pTop_Part));
//Получаем интерфейс объекта "Эскиз"
EntityDraw:=ksEntity(Part.NewEntity(o3d_sketch));
//Получаем интерфейс параметров эскиза
SketchDefinition:=ksSketchDefinition(EntityDraw.GetDefinition());
//Получаем интерфейс объекта "плоскость XOY"
EntityPlane:=ksEntity(Part.GetDefaultEntity(o3d_planeXOY));
//Устанавливаем плоскость XOY базовой для эскиза
SketchDefinition.SetPlane(EntityPlane);
//Создаем эскиз
EntityDraw.Create();
//Входим в режим редактирования эскиза
doc:=ksDocument2D(SketchDefinition.BeginEdit());

doc.ksLineSeg(0,0,(Db-d)/6,0, 1);
doc.ksLineSeg((Db-d)/6,0,(Db-d)/6,(B-Dw)/2+0.71, 1);
doc.ksLineSeg((Db-d)/6,(B-Dw)/2+0.71, (Db-d)/6 - Dw/5,(B-Dw)/2+0.71,  1);
doc.ksLineSeg((Db-d)/6 - Dw/5,(B-Dw)/2+0.71, (Db-d)/6 - Dw/5, B-(B-Dw)/2-0.71, 1);
doc.ksLineSeg((Db-d)/6 - Dw/5, B-(B-Dw)/2-0.71,(Db-d)/6, B-(B-Dw)/2-0.71, 1);
doc.ksLineSeg((Db-d)/6, B-(B-Dw)/2-0.71, (Db-d)/6 , B,  1);
doc.ksLineSeg((Db-d)/6 , B, 0 , B, 1);
doc.ksLineSeg(0 , B, 0, 0,  1);
doc.ksLineSeg(Db/2,0,Db/2,B,3);


//Выходим из режима редактирования эскиза
SketchDefinition.EndEdit();

//Операция "выдавливание вращением"
////////////////////////////////////////////////
//Получаем интерфейс объекта "операция выдавливание вращением"
EntityRotated:=ksEntity(Part.NewEntity(o3d_baseRotated));
//Получаем интерфейс параметров операции "выдавливание вращением"
BaseRotatedDefinition:=ksBaseRotatedDefinition(EntityRotated.GetDefinition());
//Направление выдавливания - прямое
BaseRotatedDefinition.directionType:=dtNormal;
//Устанавливаем параметры операции
BaseRotatedDefinition.SetSideParam(TRUE,360);
//Устанавливаем эскиз операции
BaseRotatedDefinition.SetSketch(EntitySketch);
//Создаем операцию
EntityRotated.Create();
Document3D.drawMode:=vm_Shaded;
//Включаем отображение каркаса
Document3D.shadedWireframe:=TRUE;
//Делаем КОМПАС видимым
kompas.Visible:=true;

Программу приложил

Golovanev

Один простой совет. Проверьте построенный эскиз. В Компасе то по нему выдавливание вращением вручную удаётся сделать?

diadka_fedor

Цитата: Golovanev от 24.06.15, 14:17:46
Один простой совет. Проверьте построенный эскиз. В Компасе то по нему выдавливание вращением вручную удаётся сделать?
Да, вручную выдавливание делается без всяких проблем.

//Устанавливаем эскиз операции
BaseRotatedDefinition.SetSketch(EntityDraw);

diadka_fedor

Цитата: Sabahs от 24.06.15, 14:58:36
//Устанавливаем эскиз операции
BaseRotatedDefinition.SetSketch(EntityDraw);
Спасибо большое. Не заметил)))