用lz的方法 在有些时候判别出现了问题
你看下这样代码应该好点
-
- public int ptInPolygon1(Point3d pt, Polyline pPolyline)
- {
- int count = pPolyline.NumberOfVertices;
- //构建多边形外接矩形
- double maxx = double.MinValue, maxy = double.MinValue, minx = double.MaxValue, miny = double.MaxValue;
- for (int i = 0; i maxx)
- {
- maxx = pPolyline.GetPoint3dAt(i).X;
- }
- if (pPolyline.GetPoint3dAt(i).Y > maxy)
- {
- maxy = pPolyline.GetPoint3dAt(i).Y;
- }
- if (pPolyline.GetPoint3dAt(i).X maxx || pt.Y > maxy || pt.X = 1)
- {
- for (int n = 0; n pt.X)
- {
- crossCount++;
- Circle pCircle = new Circle(crossPt, Vector3d.ZAxis, 2);
- pBlockTableRecord.AppendEntity(pCircle);
- tran.AddNewlyCreatedDBObject(pCircle, true);
- }
- }
- }
- Circle circle = new Circle(pt, Vector3d.ZAxis, 2);
- pBlockTableRecord.AppendEntity(circle);
- tran.AddNewlyCreatedDBObject(circle, true);
- pBlockTableRecord.AppendEntity(line1);
- tran.AddNewlyCreatedDBObject(line1, true);
- tran.Commit();
- }
- return crossCount % 2;
- }
|