明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2754|回复: 7

用选择集剪除线段,如何判断线段方向

[复制链接]
发表于 2004-11-28 15:34:00 | 显示全部楼层 |阅读模式
想将一幅1:500的地形图从一张大图中分离出来,思路如下:
1.构建四个窗口选择集(w):直接删除其中的图元,
第一为全图左下角到分图幅下边线的向右延长线
第二为全图右上角到分图幅上边线的向左延长线
第三为全图左下角到分图幅左边线的向上延长线
第四为全图右上角到分图幅右边线的向下延长线
窗口选择不会将与边线相交的实体删除,而那些无长度属性的图元会全部删除。
2.重新构建四个窗口选择集(这次使用交叉选择c),并画出分图幅的四条边线:
这次剩下的为与图幅边有实际交点的实体图无,实行剪除操作。
对于多线(mline)来说,不能进行剪除操作,必须先炸开,(较少见)暂回避
对于文本(text)来说,也不能进行剪除操作,避开 以下程序是第二步的一部分,其中pm1为整图左下角点,pt1为分幅图左下角点,
pm4为分幅图下边线向右延伸与整图右边线相交的点,pt4为分幅图右下角点 (setq sset1 (ssget "c" pm1 pm4))) ;;下方选择集
(command "_line" pt1 pt4 "") ;;分幅图下底边线
(setq txline1 (cdr (car (entget (entlast))))) ;;得到图元名
(if sset1 ;;当sset成功时(不为空),(sslength sset)才能正确执行.
(progn
(setq ssn1 (sslength sset1))
(setq n 0 m ssn1) ;;n为检索图元索引号循环(从0开始),M为循环次数
(repeat m ;;循环至检查完全部图元
(setq txname (ssname sset1 n)) ;;选择集中第n个图元名称
(setq oldtxm (entget txname '("*" ))) ;;取出其中的数据(包括扩展数据)
(setq txlb (cdr (assoc 0 oldtxm))) ;;为图形类别
(if (/= txlb "TEXT")
(progn
(setq endpt (vlax-curve-getEndPoint txname)) ;;曲线或直线端点坐标
(command "trim" txline1 "" (list txname endpt) "") ;;修剪
))
(setq n (1+ n)) ;;索引号N累加,至N》SSNO时退出环
) ;;END repeat
)
) ;;end if sset1
现在请教各位高手的是:
1.(command "trim" txline1 "" (list txname endpt) ""),
如何让他只能剪除 (command "_line" pt1 pt4 "")直线下方的图形
(一条线应有两个端点,我发现(vlax-curve-getEndPoint txname)此中的端点只有一个,
即使判断在线段的上方,我也不知道怎样去找线段的下方,如果是直线还好说,
对VL-函数本人没有透彻理解,现在都是比到书本和高手之作进行移植,实在不好意思)
2.用(command "trim"....)除了文本和多线(mline)无效外,还有哪些图元实体碰到此命令
会发生错误?
3.谢谢明经的各位高手使我得益良多。请各位继续赐教! 陈四清 chen4@py.gov.cn
发表于 2004-11-28 19:10:00 | 显示全部楼层
offset


trim "f"
 楼主| 发表于 2004-11-28 19:31:00 | 显示全部楼层
请老兄说得详细一点,trim命令时没有"f"参数,选择要修剪的对象或 [投影(P)/边(E)/放弃(U)]:         选择一个对象、输入一个选项或按 ENTER 键。


另外offset是实体偏移命令,在这里怎么起什么作用,怎么用?
发表于 2004-11-28 20:20:00 | 显示全部楼层
你试试看就知道有没有"f"参数了
发表于 2004-11-28 21:39:00 | 显示全部楼层
用MAP的裁减函数,很好的自动判断点、块、字插入点位位置,裁减很干净,也不会想TRIM一样漏裁东西


能很好的避免漏裁或错删除
 楼主| 发表于 2004-11-29 04:22:00 | 显示全部楼层
还是一头雾水,


(command "trim" txline1 "" (list txname endpt) "")与


(command "trim" txline1 "" (list txname endpt) "f" "")         剪除的线段没有不同,


至于offset或楼上的map函数查帮助,也试了,不知用法。我真笨,请高手举例指教一下。
 楼主| 发表于 2004-11-29 06:09:00 | 显示全部楼层
判断线段方向问题自己已经解决: (setq startpt (vlax-curve-getstartPoint txname)) ;;曲线或直线起点坐标
(setq endpt (vlax-curve-getEndPoint txname)) ;;曲线或直线终点坐标 比较起点和终点坐标即可,其他全是弯路。 现在,对于多线mline和多义线LWPOLYLINE,难道我们只能炸开吗? 有不有更好的命令或函数来切割呢?割除后的线段如何再还原为多线和多义线呢? 请各位献计献策。
 楼主| 发表于 2004-11-29 20:50:00 | 显示全部楼层
希望各位留言时不要太惜言如金,请详细一点,今天从网上终于找到了trim的用法: trim命令中提示选取要剪切的图形时,不支持常用的window和crossing选取方式。当要剪切多条线段时,要选取多次才能完成。这时可以使用fence选取方式。当trim命令提示选择要剪除的图形时,输入“f”,然后在屏幕上画出一条虚线,回车,这时被该虚线接触到的图形全部被剪切掉。 此命令果然有其独到之处 ,多义线,圆弧之类都可剪,不能剪的东西也不会返回错误,不象我原来又是判断起点终点的很费事费神的,谢谢各位的指教,我现把trim命令加F参数的lisp调用格式提出来,供各位分享: (command "_trim" txline "" "f" pt1 pt2 "" "") txline 剪切边线的图元名 f 为参数 pt1和 pt2为两个虚线点,特别提醒注意空字符串的个数不能少,我可是试了多次才得出的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-30 04:29 , Processed in 0.172425 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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