Проблема при создании дуги IArc3D

Автор ural_su, 31.10.13, 16:50:42

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

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

ural_su

такое ощущение что ошибка именно в интерфейсе IArc3D

02.11.13, 00:10:45 #41 Последнее редактирование: 02.11.13, 01:15:05 от Sabahs
Точка центра, начала и конца дуги, принадлежат плоскости plane_ent?
Также базовая плоскость, при  arc3D->PutBuildingType(ksArc3DByDirrection); не проходит через центр сферы и 2 точки, т.е., чтобы доказать, что такое ощущение что ошибка именно в интерфейсе IArc3D, нужны все координаты объектов в пространстве.


ural_su

плоскость построена через эти две точки и начало координат

ural_su

02.11.13, 01:39:03 #43 Последнее редактирование: 02.11.13, 01:50:36 от ural_su
ksEntityPtr CreatePlaneCsAnd2Point(ksDocument3DPtr& ksDoc, ksEntityPtr point1_ent, ksEntityPtr point2_ent)
{
   ksEntityPtr plane_ent = NULL;
   ksPartPtr part(ksDoc->GetPart(pTop_Part));
   if (part)
   {
      //создаем плоскость
      plane_ent = part->NewEntity(o3d_plane3Points);
      if (plane_ent)
      {
         ksPlane3PointsDefinitionPtr plane_def(plane_ent->GetDefinition());
         plane_def->SetPoint(1, part->GetDefaultEntity(o3d_pointCS));
         plane_def->SetPoint(2, point1_ent);
         plane_def->SetPoint(3, point2_ent);
         plane_ent->hidden = TRUE;
         plane_ent->Create();
      }
   }
   return plane_ent;
}

Можете модель прикрепить, которая у Вас получилась.

ural_su

вот такая вот вещь получается


ural_su

вот деталь

Попробуйте сделать так
arc3D->PutAssociationObject(ksArc3DPoint2, obj_1);
arc3D->PutAssociationObject(ksArc3DPoint3, obj_2);
вместо
arc3D->PutAssociationObject(ksArc3DAngle1, obj_1);
arc3D->PutAssociationObject(ksArc3DAngle2, obj_2);

Сделал пример похоже ошибка в интерфейсе, а точнее третью точку операции воспринимает, как радиус, из за того, что глупо тип определён.
P.S. Запишу, как ошибку в БОиП.

ural_su

ну да я тоже на это обратил внимание, но он почему то игнорит точку передаваемую с параметром ksArc3DPoint1 вторую и третью(она же радиус) цепляет

ural_su

так и пришлось строить дугу через две точки и направляющую, так дуга рисуется без проблем

06.11.13, 12:29:12 #52 Последнее редактирование: 06.11.13, 12:43:58 от Sabahs
В Компас V15, ошибку исправили.
Тестовая процедура.
//==============================================================================
procedure Shara;
var
X:Double;
pDocuments:IDocuments;
pDocument:IKompasDocument;
Doc3D:IKompasDocument3D;
pPart7:IPart7;
pModelContainer:IModelContainer;
pSketchs:ISketchs;
pSketch:ISketch;
Plane,pModelObject:IModelObject;
pRotateds:IRotateds;
pRotated:IRotated;
pThinParameters:IThinParameters;
pPoints3D:IPoints3D;
pPoint1,pPoint2:IPoint3D;
pDoc3DApi5:IDocument3D;
pPart:IPart;
pEntity,pEntity1,pEntity2,pEntity3:IEntity;
Plane3Points:IPlane3PointsDefinition;
pAuxiliaryGeomContainer:IAuxiliaryGeomContainer;
pArcs3D:IArcs3D;
pArc3D:IArc3D;
Disp:=IDispatch;
begin
   Disp:=IDispatch(CreateKompasApplication);
   NewKompasApi:=Disp as IApplication;
   if NewKompasApi<>nil then pDocuments:=NewKompasApi.Documents;
   if pDocuments<>nil then pDocument:=pDocuments.Add(ksDocumentPart,True);
   if pDocument<>nil then Doc3D:=pDocument as IKompasDocument3D;
   if Doc3D<>nil then pPart7:=Doc3D.TopPart;
   if pPart7<>nil then
    begin
      pModelContainer:=pPart7 as IModelContainer;
      if pModelContainer<>nil then
       begin
         pSketchs:=pModelContainer.Sketchs;
         if pSketchs<>nil then pSketch:=pSketchs.Add;
         if pSketch<>nil then
          begin
            Plane:=pPart7.DefaultObject[o3d_planeXOY];
            if Plane<>nil then pSketch.Plane:=Plane;
            pSketch.BeginEdit;
            ArcByPoint(0,0,11,0,11,0,-11,0,1);
            LineSeg(0,11,0,-11,3);
            pSketch.EndEdit;
            pSketch.Hidden:=True;
            pSketch.Update;
          end;
         pRotateds:=pModelContainer.Rotateds;
         if pRotateds<>nil then pRotated:=pRotateds.Add(o3d_bossRotated);
         if pRotated<>nil then
          begin
            pRotated.Profile:=pSketch as IModelObject;
            pRotated.ToroidShapeType:=False;
            pRotated.Angle[True]:=360;
            pThinParameters:=pRotated as IThinParameters;
            if pThinParameters<>nil then pThinParameters.Thin:=False;
            pRotated.Update;
          end;
         X:=Sqrt((11*11)/3);
         pPoints3D:=pModelContainer.Points3D;
         if pPoints3D<>nil then
          begin
            pPoint1:=pPoints3D.Add;
            if pPoint1<>nil then
             begin
               pPoint1.ParameterType:=ksPParamCoord;
               pPoint1.X:=X;
               pPoint1.Y:=X;
               pPoint1.Z:=X;
               pPoint1.Update;
             end;
            pPoint2:=pPoints3D.Add;
            if pPoint2<>nil then
             begin
               pPoint2.ParameterType:=ksPParamCoord;
               pPoint2.X:=X;
               pPoint2.Y:=-X;
               pPoint2.Z:=X;
               pPoint2.Update;
             end;
          end;
         pDoc3DApi5:=IUnknown(ksTransferInterface(LtDefine.PIUnknown(Doc3D),ksAPI3DCom,0)) as IDocument3D;
         if pDoc3DApi5<>nil then pPart:=IPart(pDoc3DApi5.GetPart(pTop_Part));
         pEntity:=IEntity(pPart.NewEntity(o3d_plane3Points));
         if pEntity<>nil then Plane3Points:=IUnknown(pEntity.GetDefinition) as IPlane3PointsDefinition;
         if Plane3Points<>nil then
          begin
            pEntity1:=IUnknown(ksTransferInterface(LtDefine.PIUnknown(pPoint1 as IModelObject),ksAPI3DCom,o3d_entity)) as IEntity;
            pEntity2:=IUnknown(ksTransferInterface(LtDefine.PIUnknown(pPoint2 as IModelObject),ksAPI3DCom,o3d_entity)) as IEntity;
            pEntity3:=IUnknown(ksTransferInterface(LtDefine.PIUnknown(pPart7.DefaultObject[o3d_pointCS]),ksAPI3DCom,o3d_entity)) as IEntity;
            if pEntity1<>nil then Plane3Points.SetPoint(1,pEntity1);
            if pEntity2<>nil then Plane3Points.SetPoint(2,pEntity2);
            if pEntity3<>nil then Plane3Points.SetPoint(3,pEntity3);
            pEntity.Update;
          end;
         pAuxiliaryGeomContainer:=pPart7 as IAuxiliaryGeomContainer;
         if pAuxiliaryGeomContainer<>nil then pArcs3D:=pAuxiliaryGeomContainer.Arcs3D;
         if pArcs3D<>nil then pArc3D:=pArcs3D.Add;
         if pArc3D<>nil then
          begin
            pArc3D.BuildingType:=ksArc3DByCentre;
            pArc3D.Direction:=True;
            pArc3D.AssociationObject[ksArc3DCenter]:=pPart7.DefaultObject[o3d_pointCS];
            pModelObject:=IUnknown(ksTransferInterface(LtDefine.PIUnknown(pEntity),ksAPI7Dual,0)) as IModelObject;
            if pModelObject<>nil then pArc3D.BuildingObject:=pModelObject;
            pArc3D.AssociationObject[ksArc3DAngle1]:=pPoint1 as IModelObject;
            pArc3D.AssociationObject[ksArc3DAngle2]:=pPoint2 as IModelObject;
            pArc3D.AssociationObject[ksArc3DRadius]:=pPoint2 as IModelObject;
            pArc3D.Update;
          end;
       end;
    end;
end;
//==============================================================================
+ Благодарностей: 1

ural_su

это хорошая новость, будем ждать 15 версию

ural_su

немного оффтоп где можно найти  step13 из примеров? (у меня 12 заканчивается)
И имеется ли возможность единожды созданный эскиз размножить по нескольким плоскостям.