У меня есть пункт привязки к моему приложению, но это замедляет работу моего приложения, кто-нибудь может мне помочь? моё приложение рисует как автокад. и я использую глазной выстрел SDK, чтобы разработать его. это выглядит нормально, пока я не использую панорамирование / поворот.
это мой код
public SnapPoint[] GetSnapPoints(System.Drawing.Point mouseLocation)
{
//changed PickBoxSize to define a range for display snapPoints
var oldSize = PickBoxSize;
PickBoxSize = 10;
var snapPoints = new List<SnapPoint>();
var entityIndexs = GetAllEntitiesUnderMouseCursor(mouseLocation, false);
if (entityIndexs.Length>0)
{
var countindex = 0;
foreach (int index in entityIndexs)
{
if (Entities[index] is ICurve entCurve)
{
var indexVerTex = 0;
var entPoints = entCurve.GetPointsByLength(0.9);
foreach (Point3D vertex in Entities[index].Vertices)
{
snapPoints.Add(new SnapPoint(vertex, ObjectSnapType.End));
if (indexVerTex>0)
{
var midPoint = FindMidPoint3D(Entities[index].Vertices[indexVerTex - 1], vertex);
snapPoints.Add(new SnapPoint(midPoint,ObjectSnapType.Mid));
}
indexVerTex++;
}
if (entCurve is LinearPath linearPath)
{
var temptPoints = this.GetIntersectBySeft(linearPath);
if (temptPoints.Count > 0)
{
foreach (var temptPoint in temptPoints)
{
if (!CheckPointInSnapPoints(temptPoint, snapPoints))
{
snapPoints.Add(new SnapPoint(temptPoint, ObjectSnapType.Intersect));
}
}
}
}
if (countindex > 0)
{
Point3D intersectPoint3D = null;
if (Entities[entityIndexs[countindex - 1]] is ICurve line1 && Entities[entityIndexs[countindex]] is ICurve line2)
{
if (line1 is LinearPath linePath1)
{
var intersectPoints = linePath1.IntersectWith(line2);
foreach (Point3D intersectPoint in intersectPoints)
{
snapPoints.Add(new SnapPoint(intersectPoint, ObjectSnapType.Intersect));
}
}
else if (line2 is LinearPath linePath2)
{
var intersectPoints = linePath2.IntersectWith(line1);
foreach (Point3D intersectPoint in intersectPoints)
{
snapPoints.Add(new SnapPoint(intersectPoint, ObjectSnapType.Intersect));
}
}
else if (CompositeCurve.IntersectionLineLine(line1, line2, out intersectPoint3D))
{
snapPoints.Add(new SnapPoint(intersectPoint3D, ObjectSnapType.Intersect));
}
}
}
foreach (Point3D entPoint in entPoints)
{
if (!CheckPointInSnapPoints(entPoint, snapPoints))
{
snapPoints.Add(new SnapPoint(entPoint, ObjectSnapType.Nearest));
}
}
}
countindex++;
}
}
var entIndex = GetEntityUnderMouseCursor(mouseLocation);
Point3D tempPoint =null;
if (entIndex>-1)
{
}
var snaps = snapPoints.ToArray();
return snaps;
}
и этот
public List<Point3D> GetIntersectBySeft(LinearPath linearPath)
{
var lines = linearPath.ConvertToLines();
var temPoint3Ds = new List<Point3D>();
for (int i = 0; i < lines.Length; i++)
{
for (int j = i+2;j<lines.Length; j++)
{
temPoint3Ds.AddRange(lines[i].IntersectWith(lines[j]));
}
}
var tempPoints2 = new List<Point3D>();
foreach (var temPoint in temPoint3Ds)
{
if (!tempPoints2.Contains(temPoint))
{
tempPoints2.Add(temPoint);
}
}
return tempPoints2;
}
и этот
public bool CheckPointInSnapPoints(Point3D point, List<SnapPoint> snapPoints)
{
return snapPoints.Any(snapPoint => point.X == snapPoint.X && point.Y == snapPoint.Y);
}
public Point3D FindMidPoint3D(Point3D pointA, Point3D pointB)
{
return new Point3D((pointA.X+pointB.X)/2,(pointA.Y+pointB.Y)/2);
}
любой может помочь мне решить эту проблему для наилучшего результата в этом случае, пожалуйста