Нужна помощь 3D Операция вращения(Delphi)

Автор Noob, 07.12.09, 20:20:50

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

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

Noob

Делал по мануалу-неполучаеться, всё время жалуеться на то что: "Нарушенна целостность тел". Упрощаю до прямой-руками работает, програмно-жалуется...Может у кого есть пример кода? Без разници что-главное чтобы вращением. Разберусь-пойму.

yarikv


Noob

Огромное СПАСИБО! Всё получилось, пойду искать ошибку в своем коде  :-)))

seregaa

вот пример кода....
// Операции вращения
//-
procedure OperationRotated;
var
  iPart: ksPart;
  iSketchEntity: ksEntity;
  iSketchDef: ksSketchDefinition;
  iPlaneEntity: ksEntity;
  iSketchDocument2D: ksDocument2D;
  iBaseRotatedEntity: ksEntity;
  iBaseRotatedDef: ksBaseRotatedDefinition;
  iRotatedProperty: ksRotatedParam;
  iSketch2Entity: ksEntity;
  iSketch2Def: ksSketchDefinition;
  iSketch2Document2D: ksDocument2D;
  iBossRotatedEntity: ksEntity;
  iBossRotatedDef: ksBossRotatedDefinition;
  iSketch3Entity: ksEntity;
  iSketch3Def: ksSketchDefinition;
  iSketch3Document2D: ksDocument2D;
  iCutRotatedEntity: ksEntity;
  iCutRotatedDef: ksCutRotatedDefinition;

begin
  iKompasObject.ksMessage( 'базовая операция вращения' );

  iPart := ksPart(iDocument3D.GetPart( pTop_Part )); // новый компонент

  if iPart <> nil then
  begin
    iSketchEntity := ksEntity( iPart.NewEntity( o3d_sketch ));

    if iSketchEntity <> nil then
    begin
      // интерфейс свойств эскиза
      iSketchDef := ksSketchDefinition(iSketchEntity.GetDefinition);

      if iSketchDef <> nil then
      begin
        // интерфейс плоскости XOY
        iPlaneEntity := ksEntity(iPart.GetDefaultEntity( o3d_planeXOY ));

        if iPlaneEntity <> nil then
        begin
          iSketchDef.SetPlane( iPlaneEntity ); // установим плоскость XOY базовой для эскиза
          iSketchEntity.Create; // создадим эскиз
          // интерфейс редактора эскиза
          iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);

          if iSketchDocument2D <> nil then
          begin
            // введем новый эскиз
            iSketchDocument2D.ksArcByAngle( 0, 0, 20, -90, 90, 1, 1 );
       iSketchDocument2D.ksLineSeg( 0, -20, 0, 20, 3 );
       iSketchDef.EndEdit; // завершение редактирования эскиза
          end;

          iBaseRotatedEntity := ksEntity(iPart.NewEntity( o3d_baseRotated ));

          if iBaseRotatedEntity <> nil then
          begin
            iBaseRotatedDef := ksBaseRotatedDefinition(iBaseRotatedEntity.GetDefinition); // интерфейс базовой операции вращения

       if iBaseRotatedDef <> nil then
            begin
              iRotatedProperty := ksRotatedParam(iBaseRotatedDef.RotatedParam);

         if iRotatedProperty <> nil then
              begin
            iRotatedProperty.Direction := dtBoth;
            iRotatedProperty.ToroidShape := false;
         end;

              //iBaseRotatedDef.SetTorShapeType(false);
              //iBaseRotatedDef.SetDirectionType( dtNormal ); // направление вращения
         iBaseRotatedDef.SetThinParam( true, dtBoth, 1, 1 ); // тонкая стенка в два направления
         iBaseRotatedDef.SetSideParam( true, 180 );
         iBaseRotatedDef.SetSketch( iSketchEntity ); // эскиз операции вращения
         iBaseRotatedEntity.Create; // создать операцию
            end;
     end;
        end;
      end;
    end;

Elonex

Я не пойму, а что ось вращения никак не указывается? а вокруг чего эскиз тогда вращается? Вот интерфейс ksBossRotatedDefinition, покопался но ничего не нашел про ось вращения

А это iSketchDocument2D.ksLineSeg( 0, -20, 0, 20, 3 ); по Вашему, что?

Elonex


chelkar

Еще можно взять новый интерфейс - IRotated
В нем ось можно задать явно IRotated::Axis либо ось не задавать, тогда она возьметься из эскиза.