四个方向取 Pline 两点间节点
和炫翔版主聊到的一个程序,共享一下**** Hidden Message *****
学习一下 感谢 eachy 副站长分享程序! 本帖最后由 HLCAD 于 2014-8-22 11:45 编辑
感谢站长!我想如果用于正投影的话,将非常有用!;;; 点表pnts,沿某一角度ang(弧度)进行投影时,剔除共线的、远离的点
;;; fuzz为精度控制值.
;;; 程序编制:HLCAD,于2014.08.22
;;; 程序吸取了“元老st788796”中的trans用法;
;;; 程序用到“站长eachy”的程序的 ptl、an之后(加一行),
;;; 如:ptl (Pnts-Angle-Project ptl an 1e-06) 解决重复线的问题。
;;; 本想在后跟贴,然太远,特再编辑放到此处。
;| Ex:
(defun c:tt1 nil
(setq tmp (Pnts-Angle-Project
(setq pnts(polyline:verts(car(entsel"\n点取多段线:"))))
(setq ang (getangle"\n投影线角度:"))
(setq fuzz 1e-06)
))
(command"_.pline") (mapcar'(lambda(x)(command"_non"x))tmp) (command"")
)
|;
;;;
(defun Pnts-Angle-Project (pnts ang fuzz / p1 p2 v Lst rtn)
(setq p1 (polar (car pnts) ang100.)
p2 (polar (car pnts) ang -100.)
)
(setq v (mapcar '- p2 p1)
Lst (mapcar '(lambda (x) (trans (mapcar '- x p1) 0 v)) pnts)
Lst (mapcar '(lambda (x) (list (car x) (caddr x))) Lst) ;去除中间值0.0
Lst (mapcar '(lambda(x y) (list x y)) Lst pnts)
)
(setq Lst (vl-sort Lst
'(lambda (x1 x2)
(if (equal (caar x1) (caar x2) fuzz)
(< (cadar x1) (cadar x2))
(< (caarx1) (caarx2))
))))
(setq rtn '())
(mapcar '(lambda (x)
(if (equal (caar x) (caar(last rtn)) fuzz)
nil
(setq rtn (append rtn (list x)))
)) Lst)
(mapcar 'cadr rtn)
)
回复看看,学习一下
正投影,只要看线需要再处理一下顶点
(defun PntsProjectTo (e pnts p1 p2 / v nl nnl)
(setq v (mapcar '- p2 p1)
lst (mapcar '(lambda (x)
(list (last (trans (mapcar '- x p1) 0 v)) x)
)
pnts
)
nl(list (car lst))
lst (cdr lst)
)
(while lst
(if (or (> (caar lst) (caar nl))
(not (equal (caar lst) (caar nl) 1e-6))
)
(setq nl (cons (car lst) nl))
)
(setq nnl (cons (car lst) nnl)
lst (cdr lst)
)
)
(if nnl
(list (reverse (mapcar 'cadr nl))
(reverse (mapcar 'cadr nnl))
)
(list (reverse (mapcar 'cadr nl)))
)
)
不知道是否可以应用到面积分割!谢谢啦! 回复看看,学习一下 回帖,看精彩内容去。 这个就是投影啊。。。。。对一些特定专业很实用啊
高手 st788796 发表于 2014-8-3 08:15
正投影,只要看线需要再处理一下顶点
参数E似乎没有作用?
怎么看不了
新人弱弱的问一句,怎么使用啊?命令是什么
感谢 eachy 副站长分享程序!:) 路过不错过