明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: mandala

[基础] 请教:如何重新指定一条封闭多段线的起点?(已解决,感谢andyhon)

  [复制链接]
 楼主| 发表于 2011-3-14 13:58:02 | 显示全部楼层
Andyhon 发表于 2011-3-14 10:39
您试试这段代码
(setq dat (entget ee)      ;  LwPolyLine ee
   ptfrst (cons 10 pt)     ; pt ==> 新起 ...

看了一下,我觉得老兄的这段lsp还是很有道理的,不过我对如何具体使用还是不太懂,我这么一用,结果是什么都没了:
(defun c:aa ()
(setq ee (car(entsel)))
(setq pt (getpoint))

(setq dat (entget ee)      ;  LwPolyLine ee
   ptfrst (cons 10 pt)     ; pt ==> 新起点 say '(100 200)
     dat0 (reverse (member '(39 . 0.0) (reverse dat)))
     dat1 (cdr (member '(39 . 0.0)  dat))
     dat9 (List (Last dat1))
     dat1 (reverse (cdr (reverse dat1)))
     data (member ptfrst dat1)
     datb (reverse (cdr (member ptfrst (reverse dat1))))
)
(entmod (append dat0 data datb dat9))

)
发表于 2011-3-14 14:36:11 | 显示全部楼层
(setq pt (getpoint))
这个 pt 不合 LwPolyLine 的 Data 格式
您比对即知
 楼主| 发表于 2011-3-14 14:50:07 | 显示全部楼层
本帖最后由 mandala 于 2011-3-14 14:50 编辑
Andyhon 发表于 2011-3-14 14:36
(setq pt (getpoint))
这个 pt 不合 LwPolyLine 的 Data 格式
您比对即知


我真该死,最简单的问题想了半天,应该这么用才是:
(defun c:aa ()
(setq ee (car(entsel)))
(setq p1 (getpoint))
(setq pt (list (car p1) (cadr p1)))

(setq dat (entget ee)      ;  LwPolyLine ee
   ptfrst (cons 10 pt)     ; pt ==> 新起点 say '(100 200)

     dat0 (reverse (member '(39 . 0.0) (reverse dat)))
     dat1 (cdr (member '(39 . 0.0)  dat))
     dat9 (List (Last dat1))
     dat1 (reverse (cdr (reverse dat1)))
     data (member ptfrst dat1)
     datb (reverse (cdr (member ptfrst (reverse dat1))))
)
(print pt)(print dat)
(entmod (append dat0 data datb dat9))

)
 楼主| 发表于 2011-3-14 20:58:14 | 显示全部楼层
本帖最后由 mandala 于 2011-3-14 21:06 编辑

回复 Andyhon 的帖子

这段lsp的确可以改变闭合pline的起点,非常感谢!我还有一个问题:

在画闭合pline的时候,用“c”来结束pline命令。但很多时候是用捕捉端点的方式来画完一个闭合pline的,这样画出来的pline实际上是不闭合的,组码最后多了一个和起点相同的端点,另外(70)段也不对,如:

((-1 . <图元名: 7efaa138>) (0 . "LWPOLYLINE") (330 . <图元名: 7efc5cf8>) (5 .
"2CF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "jzxl") (6 .
"Continuous") (100 . "AcDbPolyline") (90 . 5) (70 . 128) (43 . 0.0) (38 . 0.0)
(39 . 0.0) (10 298.65 -13.7655) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 318.492
-13.7655) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 317.64 -29.0924) (40 . 0.0) (41
. 0.0) (42 . 0.0) (10 296.459 -27.876) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10
298.65 -13.7655) (40 . 0.0) (41 . 0.0) (42 . 0.0)
(210 0.0 0.0 1.0))

我的问题是:能否用lisp来让这类pline闭合,但组码中不会多出一个点来呢?因为如果用pedit的“c”来闭合,只是(70)段变成了129,而组码中依然多一个点,这给以后的编程会带来麻烦。


发表于 2011-3-14 21:09:39 | 显示全部楼层
将这类型的pline交付予 overKill 处理即可
 楼主| 发表于 2011-3-14 21:17:41 | 显示全部楼层
回复 Andyhon 的帖子

请问如何在lsp中引用overkill命令呢?
发表于 2011-3-14 21:28:45 | 显示全部楼层
在 Lsp 中,我没用过 OverKill 呢
若不想用 OverKill 前置处理
那么依着之前的代码改动一下亦可

若一定非得在lsp中引用overkill命令,可翻翻老帖中的类似讨论....
发表于 2011-3-14 21:30:20 | 显示全部楼层
mandala 发表于 2011-3-14 20:58
回复 Andyhon 的帖子

这段lsp的确可以改变闭合pline的起点,非常感谢!我还有一个问题:

可直接用命令PEDIT中封闭子命令"C"
发表于 2011-3-14 21:51:04 | 显示全部楼层
我记得之前有写过一个点击封闭多义线的一段,就在这一段打开(close->open)
你这个应该是这样,,比较笨的方法,,明经的高手应该有更好的方法
用getpoint获取到点
生成找出顶点链表
生成凸度表
找出点在表中拉置
更新顶点和凸度表...好像是这样...
 楼主| 发表于 2011-3-15 12:50:44 | 显示全部楼层
ZZXXQQ 发表于 2011-3-14 21:30
可直接用命令PEDIT中封闭子命令"C"

用pedit的“c”只是将70组码变成了“129”,而表里边依然多一个点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-9 13:47 , Processed in 0.202655 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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