Помогите не могу понять что я делаю не так
Мне нужно подрезать тело "кольцо" двумя плоскостями Plane
using CAD_GEO = Autodesk.AutoCAD.Geometry;
using CAD_DBS = Autodesk.AutoCAD.DatabaseServices;
// 2023.08.18
public static CAD_DBS.Solid3d CreateRing(double r1, double r2, double h,
double a1 = 0, double a2 = 0)
{
CAD_DBS.Solid3d ring = new CAD_DBS.Solid3d();
CAD_DBS.Solid3d smin = new CAD_DBS.Solid3d();
double rmax = Math.Max(r1, r2);
double rmin = Math.Min(r1, r2);
smin.CreateFrustum(h, rmin, rmin, rmin);
ring.CreateFrustum(h, rmax, rmax, rmax);
// получаю тело-кольцо
ring.BooleanOperation(CAD_DBS.BooleanOperationType.BoolSubtract, smin);
if (a1 != a2)
{ // Подрезка кольца двумя плоскостями
CAD_GEO.Point3d p0 = new CAD_GEO.Point3d(0, 0, -h/2.0);
CAD_GEO.Point3d p1 = new CAD_GEO.Point3d(rmax*Math.Cos(a1), rmax*Math.Sin(a1), -h/2.0);
CAD_GEO.Point3d p2 = new CAD_GEO.Point3d(rmax*Math.Cos(a2), rmax*Math.Sin(a2), -h/2.0);
CAD_GEO.Vector3d u1 = new CAD_GEO.Vector3d(p1.X, p1.Y, -h/2.0);
CAD_GEO.Vector3d u2 = new CAD_GEO.Vector3d(p2.X, p2.Y, -h/2.0);
CAD_GEO.Vector3d vZ = new CAD_GEO.Vector3d(p0.X, p0.Y, h);
CAD_GEO.Plane surf1 = new CAD_GEO.Plane(p1, vZ, u1);
CAD_GEO.Plane surf2 = new CAD_GEO.Plane(p2, vZ, u2);
ring.Slice(surf1);
ring.Slice(surf2);
}
return ring;
}
И потом не понятно вот что еще.
Если я подрежу тело, то как мне узнать какой кусок
тела оставить, а какой удалить?
Я хочу оставить маленький кусочек части кольца между углами a1 и a2
На картинке показано как я хочу.