проблема с созданием эскиза

Автор dimutch, 17.12.08, 19:56:02

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

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

dimutch

Добрый день всем
Возникла проблема: програмно вставляю фрагмент в режиме редактирования детали в сборке на месте. Добавляю в этот ескиз круг(к примеру) и пытаюсь определить пересекаются круг с элементами фрагмента.

Проблема: построение всех объектов проходит нормально(со стороны), НО ПАРАМЕТРЫ точек пересечения программа определить не может, а по завершению работы программы и закрытия КОМПАСА выдается сообщение:"Объекты находятся в разных видах"
Что написано не верно, помогите разобраться

Кусочек программы, где это происходит:
sborka3d.CreatePartInAssembly('E:\doki\delphi\Pascal\bibl\zaxvat_dno_levuy.m3d',basePlane);
   zaxvat_po_dnu:=kspart(sborka3d.GetPart(2));
   zaxvat_po_dnu.marking:='Захват по дну левый';
   zaxvat_po_dnu.name:='zaxva po dnu levuy';
   color_zaxvat_po_dnu := ksColorParam( zaxvat_po_dnu.ColorParam() );
   color_zaxvat_po_dnu.ambient:=0.5;
   color_zaxvat_po_dnu.diffuse:=0.5;
   color_zaxvat_po_dnu.transparency:=0.5;
   color_zaxvat_po_dnu.color:=8000;
   zaxvat_po_dnu.useColor:=0;
   zaxvat_po_dnu.Update;
   zaxvat_po_dnu.BeginEdit;
   zaxvat_po_dnu_place:=ksplacement(zaxvat_po_dnu.GetPlacement());
   zaxvat_po_dnu_place.SetOrigin(0,y3,0); //устанавливаем нуль системы коорд стакана на y1 по у относительно глобальной системы
   zaxvat_po_dnu.UpdatePlacement();
   zaxvat_po_dnu.fixedComponent:=true;
   zaxvat_po_dnu.Update();

   //оформляем параметры эскиза зпхвата по дну левого
   //создаем ескиз для операции выдавливания нарузного контура

   zaxvat_dno_cont_out_sk:=ksentity(zaxvat_po_dnu.NewEntity(o3d_sketch));
   zaxvat_dno_cont_out_def:=ksSketchDefinition(zaxvat_dno_cont_out_sk.GetDefinition);
   zaxvat_dno_cont_out_pl:=ksEntity(zaxvat_po_dnu.GetDefaultEntity( o3d_planeXOZ ));
   zaxvat_dno_cont_out_pl.Update;
   zaxvat_dno_cont_out_def.SetPlane(zaxvat_dno_cont_out_pl );
   zaxvat_dno_cont_out_def.angle:=0;
   zaxvat_dno_cont_out_sk.Create;
   doc_2d:=ksDocument2D(zaxvat_dno_cont_out_def.BeginEdit);
   doc_2d.ksLayer(1);
   fragm:=ksfragment(doc_2d.getfragment);
   frag_ref:=fragm.ksFragmentDefinition(cut_contur_file3,'group',1);
   par:=ksplacementparam(kompas.GetParamStruct( ko_PlacementParam ) ) ;
   par.Init();
   par.Scale_ := 1;
   par.Angle  := 0;
   par.scale_ := 1;
   par.xBase  := 0;
   par.yBase  := 0;
   fragm.ksInsertFragment(frag_ref,true ,par);

   // определение номера стоек для захватов, построение действительного внешнего контура захвата по дну
   ar_Mathematic2D := ksMathematic2D(Kompas.GetMathematic2D());
   DynamicArray := ksDynamicArray(Kompas.GetDynamicArray( POINT_ARR ));
   iMathPointParam := ksMathPointParam(Kompas.GetParamStruct( ko_MathPointParam ));

   rad_stoyki[0]:=60;
   rad_stoyki[1]:=90;
   rad_stoyki[2]:=120;
   rad_stoyki[3]:=160;
   i:=0;
   zazor:=0;
   while (zazor<5) and (i<4) do
   begin
     circle_ref:=doc_2d.ksCircle(0,0,rad_stoyki/2,1);
     lineseg_ref:=doc_2d.ksLineSeg(0,0,-rad_stoyki/2,0,1);
     if ar_Mathematic2D.ksIntersectCurvCurv(frag_ref,lineseg_ref,DynamicArray)=0 then ShowMessage('bed');
     if iMathPointParam <> nil then
      for i := 0 to DynamicArray.ksGetArrayCount - 1 do
      begin
        DynamicArray.ksGetArrayItem( i, iMathPointParam );
        Doc_2D.ksPoint( iMathPointParam.x, iMathPointParam.y, 5 );
      end;
     i:=i+1;




   end;
   zaxvat_dno_cont_out_def.EndEdit;