明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3470|回复: 20

[提问] 怎么选择这种PL线上的块

[复制链接]
发表于 2015-11-20 19:52:21 | 显示全部楼层 |阅读模式

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

12楼  发表于 2015-11-29 12:14
上dwg文件  发表于 2015-11-22 04:26
发表于 2015-11-23 19:05:22 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-11-24 10:55 编辑



  1. (defun c:tt(/ e a b s i)
  2.   (if(and(setq e(car(entsel)))
  3.          (member(cdr(assoc 0(entget e)))'("LINE""ARC""CIRCLE""ELLIPSE""SPLINE""LWPOLYLINE""POLYLINE"))
  4.          (vlax-method-applicable-p(setq e(vlax-ename->vla-object e))'getboundingbox))
  5.     (progn(vla-getboundingbox e'a'b)
  6.       (if(setq i 0 s(ssget"X"(list'(0 . "INSERT")'(2 . "A1")'(-4 . ">=,>=")(cons 10(vlax-safearray->list a))'(-4 . "<=,<=")(cons 10(vlax-safearray->list b)))));;2组里边的块名根据自己情况更换
  7.         (progn
  8.           (repeat(sslength s)
  9.             (setq a(ssname s i)p(cdr(assoc 10(entget a))))
  10.             (if(equal(vlax-curve-getClosestPointTo e p)p 1e-8);;块插入点在线上
  11.               (setq i(1+ i))
  12.               (setq s(ssdel a s))))  
  13.           (if(>(sslength s)0)(sssetfirst'nil s)
  14.             (setq s nil))
  15.           (alert(strcat(if s(itoa(sslength s))"0")"个图块被选出!\n接下来该你表演"))
  16.           ;;;
  17.           )))))

没有采用在曲线上密集采点进行栏选的办法。一是因为各种曲线采点过程比较复杂才能做到拆线能很好的代替曲线,然而这并不是最主要的,更重要的是另一个原因,进行栏选所用的点不能产生自相交,因此对于drawing1中的那个自相交的样条曲线将无法得到希望的选择结果



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 1 反对 0

使用道具 举报

发表于 2022-11-1 21:37:03 | 显示全部楼层
llsheng_73 发表于 2015-11-23 19:05
没有采用在曲线上密集采点进行栏选的办法。一是因为各种曲线采点过程比较复杂才能做到拆线能很好的代 ...

请教一下,如果线和图块的连接是打断的,这种情况该如何选中连线的图块呢?
发表于 2022-10-16 18:43:53 | 显示全部楼层
llsheng_73 发表于 2015-11-23 19:05
没有采用在曲线上密集采点进行栏选的办法。一是因为各种曲线采点过程比较复杂才能做到拆线能很好的代 ...

这个太好了!不受屏幕显示限制!
 楼主| 发表于 2015-11-20 19:53:48 | 显示全部楼层
光是直线的话,用坐标集来拦选可以。如果有弧度就不行。
发表于 2015-11-21 09:58:02 | 显示全部楼层
我认为先模拟点,再通过点拦选。论坛有SPL转pline.
 楼主| 发表于 2015-11-21 12:34:52 | 显示全部楼层
434939575 发表于 2015-11-21 09:58
我认为先模拟点,再通过点拦选。论坛有SPL转pline.

谢谢,有例子吗???
发表于 2015-11-21 14:35:41 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-11-21 14:39 编辑

最简单的是根据曲线的包围框进行范围选择,然后去掉不与该曲线相交的。。。
这样做的的好处是根据坐标范围进行选择比把各种曲线进行密集采点算法简单容易容易实现,不足之处是有可能需要对范围内所有待选定图元进行判断处理以剔除与该曲线不相交的
但是对各种曲线进行密集采点以保证ssget"F"能够做到无漏网之鱼虽然不用对得到的选择集进行处理,但是如果曲线本身自相交或者折返,根据采点得到的点集进行栏选时会失败
 楼主| 发表于 2015-11-22 13:26:42 | 显示全部楼层
llsheng_73 发表于 2015-11-21 14:35
最简单的是根据曲线的包围框进行范围选择,然后去掉不与该曲线相交的。。。
这样做的的好处是根据坐标范围 ...

是呀,为了选择线上的圆,我确实是加密了点,然后通过拉选,才成功,这样速度就慢了。
发表于 2015-11-22 15:23:24 | 显示全部楼层
本帖最后由 juminth 于 2015-11-22 15:25 编辑

快速选择 删选块

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

请教如何在程序中使用“快速选择”这个命令并且让它自己进行选择而不要人为参与进去?  发表于 2015-11-23 06:44
发表于 2015-11-23 06:42:06 | 显示全部楼层
54525596 发表于 2015-11-22 13:26
是呀,为了选择线上的圆,我确实是加密了点,然后通过拉选,才成功,这样速度就慢了。

应该不会因为加密点而慢下来,拉选的方式头痛之处是如果曲线本身自相交等原因而选不到任何东东。。。
发表于 2015-11-23 08:13:23 | 显示全部楼层
juminth 发表于 2015-11-22 15:23
快速选择 删选块

工具-快速选择
发表于 2015-11-23 08:35:35 | 显示全部楼层
1,选择pl,得到pl的BoundingBox
2.获取BoundingBox内所有块。
3.寻找快的boundary,得到边界LWPOLYLINE ,求有交点的。
估计复杂了一点。

点评

第三步可以直接通过vla求交点。也可能根据情况用块的插入点到曲线最后距离为0严格选出插入点在线的上块  发表于 2015-11-23 18:15
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 00:44 , Processed in 0.178215 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表