- UID
- 58957
- 积分
- 72
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-6-17
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
;;;;*******其中STA和END为关闭扑捉和记忆变量等
;;;;;这个是沿多段线(不含弧线)等距离取点,并连成多段线,其中包;
;;;含对角度的判断,当超过一定角度时候,距离重新判断
;;;;修改多断线端点
(defun c:pld (/ n pl_ss pl_n pl_name pl_dd_0 pl_dd_tz)
(princ "请选择多段线")
(setq pl_ss (ssget (list (cons 0' "LWPOLYLINE"))))
(princ "\n请输入顶点间距")
(if (/= pl_jl0 nil) (princ pl_jl0))(princ ":")
(setq pl_jl (getint))
(princ "\n请输入最大转角")
(if (/= pl_jd nil) (princ pl_jd0))(princ ":")
(setq pl_jd (getint))
(sta)
(if (= pl_jl nil) (setq pl_jl pl_jl0) (setq pl_jl0 pl_jl))
(if (= pl_jd nil) (setq pl_jd pl_jd0) (setq pl_jd0 pl_jd))
(setq n 0)
(while (< n (sslength pl_ss))
(setq pl_n (ssname pl_ss n))
(pl_duandian pl_n);;;; 返回点集合pl_dd2
(pl_duandian_tiaozhen pl_dd2 pl_jl pl_jd);;;返回调整后点集合pl_dd4
(pl_huizhi pl_dd4)
(setq n (1+ n))
)
(end)
)
;;;;********************
;;;;读多段线端点 输入多段线 返回点标pl_dd2
(defun pl_duandian (pl_name / n pl_dd1 pl_en_n )
(setq pl_en (entget pl_name))
(setq n 0)
(while (< n (length pl_en));;;读表取点
(setq pl_en_n (nth n pl_en))
(cond
((eq '10 (nth 0 pl_en_n))
(setq pl_dd1 (cons (cdr pl_en_n) pl_dd1))
))
(setq n (1+ n))
)
(if (= 1 (cdr (assoc '70 pl_en)))
(setq pl_dd1 (cons (cdr (assoc '10 pl_en)) pl_dd1)))
(setq pl_dd2 pl_dd1)
;..........
;(princ "顶点")(princ pl_dd_0)(princ);;读点
)
;;**********************
;;;重组多断线端点 输入端点 距离 转角 返回点表pl_dd_4
(defun pl_duandian_tiaozhen(pl_dd2 ld0 pl_jd / m ptst pten jdst jden jd ldst lden pl_dd3)
(setq ptst (nth 0 pl_dd2))
(setq pten (nth 1 pl_dd2))
(setq jdst (angle ptst pten))
(setq ldst ld0)
(setq pl_dd3 (cons ptst pl_dd3));;加入
(setq m 1)
(while (< m (length pl_dd2))
(setq pten (nth m pl_dd2));;;取第m个坐标
(setq jden (angle ptst pten));;;读取方向
;;;;角度判定
(setq jd (- jden jdst));;计算角度
(if (< jd 0) (setq jd (* -1 jd)))
(cond
((> jd (/ (* pl_jd pi) 180));;;角度过大
(setq pl_dd3 (cons ptst pl_dd3));;加入
(setq ldst ld0);;,归零
(setq jden (angle ptst pten))
(setq jdst (angle ptst pten))
))
;;;距离判定
(setq lden (distance ptst pten))
(while (> lden ldst);;;距离过大
(setq ptst (polar ptst jden ldst))
(setq pl_dd3 (cons ptst pl_dd3));;加入
(setq lden (distance ptst pten))
(setq jdst jden)
(setq ldst ld0)
)
(cond ((<= lden ldst);;;距离过小
(setq ptst pten)
(setq ldst (- ldst lden))
(setq jdst jden))
)
(setq m (1+ m))
)
(setq pl_dd3 (cons ptst pl_dd3));;加入
(setq pl_dd4 pl_dd3)
;;.........
;(princ "调整后顶点")(princ pl_dd_tz)(princ)
)
;;;**************
;;;;;由点表画线 输入点表 返回线
(defun pl_huizhi (pl_dd4 / m ss ss0)
(setq m 1)
(setq ss (ssadd))
(while (< m (length pl_dd4))
(command "line" (trans (nth (1- m) pl_dd4) 0 1) (trans (nth m pl_dd4) 0 1)"");;;坐标转换
(setq ss0 (ssadd (ssname (ssget "l") 0) ss))
;(princ ss)
(setq m (1+ m)))
(command "pedit" "m" ss0 "" "y" "j" "" "")
)
;;;;;书写表格 |
|