选择线段,批量删掉线段两端与块相交的部分
本帖最后由 sunqv 于 2024-3-12 13:29 编辑如题,如何实现用lisp批量删除线段两端与块相交部分线段
修改前:
修改后:
dwg图:
本帖最后由 ssyfeng 于 2024-3-12 10:06 编辑
跟我以前写的一个程序有点类似
不过物探资料最好别去修改,有可能会影响后面提取数据入库
(defun list->3pair (old / new)
(while (setq new (cons (list (car old) (cadr old) (caddr old)) new)
old (cdddr old))
)
(reverse new)
)
(defun get_interpts (obj1 obj2 / iplist)
(if (not (vl-catch-all-error-p
(setq iplist (vl-catch-all-apply
'vlax-safearray->list
(list
(vlax-variant-value
(vla-intersectwith obj1 obj2 acextendnone)
))))))
iplist
)
)
可以参考Lee mac 的插件,是我目前用过最实用的。
https://www.lee-mac.com/autoblockbreak.html
https://www.lee-mac.com/lisp/gifs/abb.gif
https://www.lee-mac.com/lisp/gifs/abbe.gif
https://www.lee-mac.com/lisp/gifs/abbs.gif
https://www.lee-mac.com/lisp/gifs/abb2.gif
https://www.lee-mac.com/lisp/AutoBlockBreakV1-9.lsp 能不能不让图块旋转呀? 自贡黄明儒 发表于 2024-3-12 07:05
(defun list->3pair (old / new)
(while (setq new (cons (list (car old) (cadr old) (caddr old))...
没看到效果、提示参数太少 本帖最后由 d1742647821 于 2024-3-12 10:12 编辑
C#来凑个热闹
powered by IFoxCAD
https://gitee.com/inspirefunction/ifoxcad
https://www.kdocs.cn/l/cc6ZXSa0vMgD
attach://133076.flv
public static void Cs6()
{
// 多选直线
var r1 = Env.Editor.GetSelection(OpFilter.Build(e => e.Dxf(0) == "LINE"));
if (r1.Status != PromptStatus.OK)
return;
using var tr = new DBTrans();
var lines = r1.Value.GetEntities<Line>().ToList();
var brfList = tr.CurrentSpace.GetEntities<BlockReference>().ToList();
foreach (var line in lines)
{
var brfIntersectList = brfList.Where(e =>
{
var p3dc = new Point3dCollection();
e.BoundingBoxIntersectWith(line, Intersect.OnBothOperands, new Plane(), p3dc, IntPtr.Zero, IntPtr.Zero);
return p3dc.Count > 0;
});
foreach (var brf in brfIntersectList)
{
BreakLineByBlock(line, brf);
}
}
}
private static void BreakLineByBlock(Line line, BlockReference brf)
{
var btr = (BlockTableRecord)brf.BlockTableRecord.GetObject();
var curves = btr.GetEntities<Curve>().Select(e => e.GetTransformedCopy(brf.BlockTransform)).OfType<Curve>()
.ToList();
var ptList = new List<Point3d>();
ptList.AddRange(curves.SelectMany(e => e.IntersectWith(line, Intersect.OnBothOperands, new Plane())));
if (ptList.Count == 0)
return;
var box = brf.GetBoundingBoxEx()!.Value;
using (line.ForWrite())
{
line.StartPoint = line.StartPoint.Z20();
line.EndPoint = line.EndPoint.Z20();
if (box.MidCenter.Distance2dTo(line.StartPoint) < box.MidCenter.Distance2dTo(line.EndPoint))
{
line.StartPoint = ptList.FindByMax(line.GetParameterAtPoint);
}
else
{
line.EndPoint = ptList.FindByMin(line.GetParameterAtPoint);
}
}
}
ssyfeng 发表于 2024-3-12 10:04
跟我以前写的一个程序有点类似
不过物探资料最好别去修改,有可能会影响后面提取数据入库
不愿意发代码,求你别发图了:'( jkop 发表于 2024-3-12 08:30
可以参考Lee mac 的插件,是我目前用过最实用的。
https://www.lee-mac.com/autoblockbreak.html
CAD批量遮罩也不错,不用修剪~ sunqv 发表于 2024-3-12 08:42
能不能不让图块旋转呀?
可以的,AutoBlockBreakV1-9.lsp的执行命令里有选项。
页:
[1]