Добрый день всем
Возникла проблема: програмно вставляю фрагмент в режиме редактирования детали в сборке на месте. Добавляю в этот ескиз круг(к примеру) и пытаюсь определить пересекаются круг с элементами фрагмента.
Проблема: построение всех объектов проходит нормально(со стороны), НО ПАРАМЕТРЫ точек пересечения программа определить не может, а по завершению работы программы и закрытия КОМПАСА выдается сообщение:"Объекты находятся в разных видах"
Что написано не верно, помогите разобраться
Кусочек программы, где это происходит:
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;