明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2022|回复: 5

[基础] 删除单个复合线顶点

[复制链接]
发表于 2013-4-18 16:55 | 显示全部楼层 |阅读模式
本帖最后由 陈亚娣 于 2013-11-2 13:05 编辑

;;;;删除单个复合线顶点(不是本人编写,只是想跟大家分享)
(defun c:xs1()
(setvar "cmdecho" 0)
(princ "\n删除单个复合线顶点")
(setq a (entsel "\n选择要删除的顶点:"))
;;第一层if开始
(if a (progn
;;第一层progn开始
(setq p1 (cadr a))
(setq p1 (reverse p1))
(setq p1 (cdr p1))
(setq p1 (reverse p1))
(setq xylt (car a))
(setq a2 (entget xylt))
;;第二层if开始
(if (or (= (cdr (ASSOC '0 a2)) "POLYLINE") (= (cdr (ASSOC '0 a2)) "LWPOLYLINE")) (progn
;;第二层progn开始
(setq osvar (getvar "osmode"))
(setvar "osmode" 0)
(setq ss1 (ssget "I"))
(if (and ss1 (= (sslength ss1) 1)) (progn
(setq mmm (cdr (assoc '0 (entget (ssname ss1 0)))))
(if (or (= mmm "POLYLINE") (= mmm "LWPOLYLINE"))
(command "pedit" "")
);if
(if (or (= mmm "ARC") (= mmm "LINE"))
(command)
);if
);progn
);if
(setq ss1 nil)
(xy_lt)
(setq pp1 p1)
(dd_shu)
;;第三层if开始
(if (> (length po_all) 2) (progn
;;第三层progn开始
(if (> ped 129) (command "pedit" xylt "D" ""))
(setq a2 (entget xylt))
(setq tyname (cdr (ASSOC '0 a2)))
(cond ((= tyname "LWPOLYLINE")
       (dd_lw)
       (if (and (> len 3) (or (= ped 132) (= ped 133))) (command "pedit" xylt "S" ""))
      )
      ((= tyname "POLYLINE")
       (dd_po)
      )
);cond
(if (and (> len 3) (or (= ped 130) (= ped 131))) (command "pedit" xylt "F" ""))
(if (and (= len 3) (or (= ped 129) (= ped 131) (= ped 133))) (command "pedit" xylt "O" ""))
);progn
;;第三层progn结束
(princ "\n复合线只剩2个顶点,无法删除!")
);if
;;第三层if结束
(setvar "osmode" osvar)
);progn
;;第二层progn结束
(princ "\n选择的不是复合线!")
);if
;;第二层if结束
);progn
;;第一层progn结束
(princ "\n没有选中目标!")
);if
;;第一层if结束
(princ)
);defun
;;----------------------------------------------------------------------
;;删简单复合线函数
(defun dd_lw()
(setq tylist nil len (length a2) tyn (cons 90 (- (cdr (assoc '90 a2)) 1)) n 0 n1 0)
(while (< n len)
(setq tylist1 (nth n a2))
(if (/= (type (cdr tylist1)) (type (list 1 1)))
(if (= tylist nil)
(setq tylist (list tylist1))
(setq tylist (cons tylist1 tylist))
);if
(if (= n1 nn)
(setq n (+ n 3) n1 (+ n1 1))
(setq tylist (cons tylist1 tylist) n1 (+ n1 1))
);if
);if
(setq n (+ n 1))
);while
(setq tylist (subst tyn (assoc '90 tylist) tylist))
(setq n 0 len (length po_all))
(setq tylist (reverse tylist))
(entmod tylist)
);defun
;;--------------------------------------------------------------------------------------
;;删复杂复合线函数
(defun dd_po()
(sh_ch)
(setq n nn len (length po_all))
(if (and (/= n 0) (/= n (- (length po_all) 1))) (setq nn1 (- n 1)  nn2 (+ n 1)))
(if (= n 0) (setq nn1 0  nn2 (+ n 2) pp (nth (+ n 1) po_all)))
(if (= n (- (length po_all) 1)) (setq nn1 (- n 2)  nn2 n pp (nth (- n 1) po_all)))
(command "pedit" xylt "e")
(setq nn 0)
(while (< nn nn1)
(command "")
(setq nn (+ nn 1))
);while
(command "s")
(while (< nn nn2)
(command "")
(setq nn (+ nn 1))
);while
(command "g")
(if (= n 0) (command "m" pp))
(if (= n (- (length po_all) 1)) (command "" "m" pp))
(command "x" "")
(command "zoom" "p")
);defun
;;---------------------------------------------------------------------
;;复合线视窗函数
(defun sh_ch()
(setq p 0)
(while (< p (length po_all))
(setq x (car (nth p po_all)) y (cadr (nth p po_all)))
(if (= p 0) (setq xx x yx y xm x ym y)
(progn
(if (< x xx) (setq xx x))
(if (> x xm) (setq xm x))
(if (< y yx) (setq yx y))
(if (> y ym) (setq ym y))
);progn
);if
(setq p (+ p 1))
);while
(command "zoom" "w" (list (- xx 1) (- yx 1)) (list (+ xm 1) (+ ym 1)))
);defun
;;---------------------------------------------------------------------------
;;;函数,顶点数
(defun dd_shu()
(setq n 0)
(setq nn 0)
(setq pp (nth 0 po_all))
(setq d0 (distance pp pp1))
(while (< n (length po_all))
(setq pp (nth n po_all))
(setq d1 (distance pp pp1))
(if (< d1 d0) (progn
(setq nn n)
(setq d0 d1)
);progn
);if
(setq n (+ n 1))
);while
);defun
;;-----------------------------------------------------------------
(defun xy_lt()
(setq po_all nil)
(setq nst2 (entget xylt))
(setq mmm (cdr (assoc '0 nst2)))
(if (or (= mmm "POLYLINE") (= mmm "LWPOLYLINE")) (progn
(setq ped (cdr (ASSOC '70 nst2)))
(if (< ped 6) (progn
(command "pedit" xylt "l" "on" "")
(setq nst2 (entget xylt))
(setq ped (cdr (ASSOC '70 nst2)))
);progn
);if
(cond ((= mmm "LWPOLYLINE")
(while (> (length nst2) 0)
(setq pp (nth 0 nst2))
(if (and (= (type (cdr pp)) (type (list 10.0 10.0))) (= (nth 0 pp) 10)) (progn
(setq pp (cdr pp))
(setq po_all (reverse po_all))
(setq po_all (cons pp po_all))
(setq po_all (reverse po_all))
)progn
);if
(setq nst2 (cdr nst2))
);while
)
((= mmm "POLYLINE")
(setq nst1 xylt)
(while (and (setq nst1 (entnext nst1)) (/= (cdr (assoc '0 (setq nst2 (ENTGET NST1)))) "SEQEND"))
(if (= (cdr (assoc '70 nst2)) (cdr (assoc '70 (entget (entnext xylt))))) (progn
(setq pp (cdr (assoc '10 nst2)))
(setq pp (reverse pp))
(setq pp (cdr pp))
(setq pp (reverse pp))
(setq po_all (reverse po_all))
(setq po_all (cons pp po_all))
(setq po_all (reverse po_all))
);progn
);if
);while
)
);cond
);progn
);if
);defun
;;------------------------------------------------------------------------------

评分

参与人数 1明经币 +1 收起 理由
tryhi + 1

查看全部评分

发表于 2013-10-29 12:20 | 显示全部楼层
缺少自定义函数
 楼主| 发表于 2013-11-2 13:08 | 显示全部楼层
hehoubin 发表于 2013-10-29 12:20
缺少自定义函数

已补上欠缺的自定义函数
发表于 2013-11-2 14:15 | 显示全部楼层
觉得太复杂了

点评

黄老师,那你能不能简化一下呢?  发表于 2013-11-2 14:49
发表于 2013-11-2 14:55 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2013-11-2 15:11 编辑

仅供参考
;;示例(HH:delLwpolyPt1 (car(setq en(entsel))) (cadr en))
(defun HH:delLwpolyPt1 (en p / ENT L1 L2 P1)
  (setq ENT (entget en))
  (setq p (vlax-curve-getclosestpointto en (trans p 1 0)))
  (setq p1 (HH:PickClosePt en p))                            ;离p最近的顶点
  (setq p1 (list 10 (car p1) (cadr p1)))
  (setq L2 (cdr (member p1 ent)))                            ;后段
  (setq L1 (reverse (cdr (member p1 (reverse ent)))))            ;前段
  (entmod (append L1 L2))
)
http://bbs.mjtd.com/thread-108149-1-1.html见HH:PickClosePt

点评

老师,HH:PickClosePt这个函数我没有  发表于 2013-11-2 15:02
谢谢,学习了!向老师学习,呵呵  发表于 2013-11-2 14:58
发表于 2016-3-18 22:14 | 显示全部楼层
HH:PickClosePt这个函数没有啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 18:03 , Processed in 0.211876 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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