框选的时候只选择边界线
本帖最后由 qq25469005 于 2023-2-27 15:11 编辑选择的时候有没有办法选择最外的边界线,也就是图中所示的没有被其他闭合曲线包围的曲线,或者换个思路选择被包围的图元
本帖最后由 qq25469005 于 2023-2-27 14:56 编辑
paulpipi 发表于 2023-2-27 08:53
大神,有试出来吗?
通过咨询上面的大佬
自己做了个勉强能用的,贴出来你看看
/// <summary>
/// 判断两个曲线的包围关系,如果是被包围的曲线就改变颜色为黄色
/// </summary>
/// <param name="curve1">曲线1</param>
/// <param name="curve2">曲线2</param>
public static void IsPolygonInsideAnotherPolygon(Curve curve1, Curve curve2)
{
Point3d point1;
Point3d point2;
MPolygon mPolygon1 = new MPolygon();
MPolygon mPolygon2 = new MPolygon();
if (curve1.GetType() == typeof(Polyline))
{
Polyline polyline1 = (Polyline)curve1;
mPolygon1.AppendLoopFromBoundary(polyline1, false, Tolerance.Global.EqualPoint);
point1 = polyline1.GetPoints().ToList();
}
else
{
Circle c1 = (Circle)curve1;
mPolygon1.AppendLoopFromBoundary(c1, false, Tolerance.Global.EqualPoint);
point1 = c1.StartPoint;
}
if (curve2.GetType() == typeof(Polyline))
{
Polyline polyline2 = (Polyline)curve2;
mPolygon2.AppendLoopFromBoundary(polyline2, false, Tolerance.Global.EqualPoint);
point2 = polyline2.GetPoints().ToList();
}
else
{
Circle c2 = (Circle)curve2;
mPolygon2.AppendLoopFromBoundary(c2, false, Tolerance.Global.EqualPoint);
point2 = c2.StartPoint;
}
if (mPolygon1.IsPointInsideMPolygon(point2, Tolerance.Global.EqualPoint).Count == 1)
{
curve2.ForWrite(e => e.ColorIndex = 2);
}
else if (mPolygon2.IsPointInsideMPolygon(point1, Tolerance.Global.EqualPoint).Count == 1)
{
curve1.ForWrite(e => e.ColorIndex = 2);
}
else return; 本帖最后由 qq25469005 于 2023-2-28 13:30 编辑
paulpipi 发表于 2023-2-27 20:54
试了一下,出现:错误: no function definition: CURVE,大神能搞个完整的出来吗?谢谢分享!
这个要使用ifoxcad开发
/// <summary>
/// 改变被包围的图元颜色为黄色
/// </summary>
public void WaiKuang()
{
using DBTrans tr = new();
var ents = Env.Editor.SSGet().Value.GetEntities<Curve>().ToList();
//ents.ForEach(t=>t.ForWrite(e => e.CloseCurve(tr)));
for(var i = 0; i < ents.Count-1; i++)
{
for(var j = i+1;j<ents.Count;j++)
{
Q_EntityEx.IsPolygonInsideAnotherPolygon(ents, ents);
}
}
} qq25469005 发表于 2023-2-27 14:53
通过咨询
自己做了个勉强能用的,贴出来你看看
内部图元改为黄色后,选择的时候用选择过滤器过滤黄色的图元,大概就差不多实现了这个效果,就是图元太多的时候效率稍慢一点 选择完再判断倒是可以,如果是要加选择过滤器感觉没法加 闻人南131 发表于 2023-2-22 16:25
选择完再判断倒是可以,如果是要加选择过滤器感觉没法加
也可以,本意就是想要区分开来,比如改变颜色之类的,能否请教一下 Extents3d extents3D = polyline.Bounds.Value;
Extents3d 有左下角点和右上角点的属性 闻人南131 发表于 2023-2-22 16:40
Extents3d extents3D = polyline.Bounds.Value;
Extents3d 有左下角点和右上角点的属性
"C:\Users\25469\Desktop\例子.jpg"像这种情况下就用这个无法判断吧 qq25469005 发表于 2023-2-22 17:02
像这种情况下就用这个无法判断吧
C:\Users\25469\Desktop\例子.jpg SelectWindowPolygon 的结果,就可以判断是否有内部对象 tiancao100 发表于 2023-2-22 18:49
SelectWindowPolygon 的结果,就可以判断是否有内部对象
好的,我试试 请高手帮忙写个码,这个很有用 qq25469005 发表于 2023-2-22 22:33
好的,我试试
大神,有试出来吗?
页:
[1]
2