xiaowa 发表于 2003-12-13 16:47:00

请教一个关于polyline顶点的问题

本帖最后由 作者 于 2003-12-13 22:24:40 编辑

我有一个polyline线,比如有1、2、3三个顶点。。。他们在一直线上,那我就要把2这个顶点给删了。。。请问怎么作?
(判断顶点1、2、3如果不在一直线那还是不要删的)

---------------
1             2            3

各位大虾帮忙解决一下吧

meflying 发表于 2003-12-13 19:06:00

判断1、2和2、3的角度,看是否相同,以及这两段是否都是直线

xiaowa 发表于 2003-12-13 21:34:00

还不是很懂。。。
而且我还碰到些问题:比如怎么样才能够删点。。。能有些简单的源代码吗?

meflying 发表于 2003-12-14 09:53:00

你应该提供你自己写的一个程序,不对没关系,这样能看出你会哪些,就比较好回答。比如说你第一个问题,我不清楚你是对功能实现不清楚,还是对这种判断的方法不清楚。。。

删除顶点将其对象的DXF组码中对应的顶点及40、41、42

(defun c:test( / ent ents pt lst i)
(command "_.undo" "be")
(setq ent (car (entsel)))
(setq ents (entget ent))
(setq pt (getpoint "输入要删除的点:"))
(setq lst (member (cons 10 (reverse (cdr (reverse pt)))) ents))
(if lst
    (progn
      (setq lst (list (assoc 10 lst) (assoc 40 lst) (assoc 41 lst) (assoc 42 lst)))
      (setq i 0)
      (repeat 4
        (setq ents (vl-remove (nth i lst) ents))
        (setq i (1+ i))
      )
    )
)
(entmod ents)
(command "_.undo" "e")
(princ)
)

xiaowa 发表于 2003-12-16 23:26:00

谢谢。。。老大。。。你写的那部分太经典了。。。如果我要写出同样的功能的要写很长。。。看样子我还是太菜了

shicai 发表于 2003-12-18 05:56:00

简化一下:
(defun c:test ()
(setq p (getpoint "\nPick Point:"))
(setq ents (entget (ssname (ssget p) 0)))
(setq lst (member (list 10 (car p)(cadr p)) ents))
(foreach i (list (assoc 10 lst)(assoc 40 lst)(assoc 41 lst)(assoc 42 lst))
    (setq ents (vl-remove i ents))
)
(entmod ents)
)

龙龙仔 发表于 2003-12-18 07:47:00

;;MEFLYING
;;vl-remove會把相同的資料去掉
;;這樣會失去 相同點 & 相同寬度 & 相同凸度 的資料
;;LOCKMYEYE的復合線頂點編輯工具可供參考,等有空我也研究研究
页: [1]
查看完整版本: 请教一个关于polyline顶点的问题