yoyoho
发表于 2011-6-26 09:47:38
同感
daidong013
发表于 2011-6-26 10:40:52
回复 zhynt 的帖子
非常不错,集成了所有的功能,支持!~~
yzr2002626
发表于 2011-6-26 11:20:23
顶ZHYNT,程序好用。我把那图层和那画交叉的删除了,就可以用于画窗立面
zhynt
发表于 2011-6-26 11:48:52
回复 yzr2002626 的帖子
提到画窗立面,这正是我下面想做得事,我想是用对话框,带预览的,参数输入后可以直观的看到,目前正在考虑,可能需要不少的时间,敬请期待。
yzr2002626
发表于 2011-6-26 14:37:55
ZHYNT,能编个这样的框选个矩形,在用虚线画出那交叉线,用户按快捷键A切换那4种方向的交叉线
yzr2002626
发表于 2011-6-26 14:41:03
那切换的那顺序左右,下上循环.
zhynt
发表于 2011-6-26 14:48:50
这个就太简单了,可以根据选取点的位置判断方向。
yzr2002626
发表于 2011-6-26 14:57:10
编个试下撒,线谢谢了
zhynt
发表于 2011-6-26 17:00:54
本帖最后由 zhynt 于 2011-6-26 17:02 编辑
先粗略的写了一下,无须用户输入什么,点哪里就画哪里,没有规划图层、线型等
;;;点到直线的距离
(defun point_line (pt pt1 pt2 / ptangle ptn pt pt1 pt2 dist jptx)
(setq ptangle (angle pt1 pt2)
ptn (polar pt (+ (* 0.5 pi) ptangle) 0.01)
jptx (inters pt ptn pt1 pt2 nil)
dist (distance pt jptx)
)
dist
)
;;;两点的中点
(defun mpt (mpt1 mpt2)
(polar mpt1 (angle mpt1 mpt2) (/ (distance mpt1 mpt2) 2))
)
(defun C:ttt ()
;;;获取图元以及控制点
(setq en(entsel)
ent (entget (car en))
pt(cadr en)
)
;;;获取矩形顶点表
(setq ptlist (vl-remove-if '(lambda (x) (/= 10 (car x))) ent))
(setq ptlist (mapcar 'cdr ptlist))
;;;对顶点表排序
(setq ptlist
(vl-sort ptlist
(function
(lambda (e1 e2)
(< (+ (car e1) (cadr e1)) (+ (car e2) (cadr e2)))
)
)
)
)
;;;;规范pt1 pt2 pt3 pt4
(setq pt1(nth 0 ptlist)
pt3(nth 3 ptlist)
ptax (car pt1)
ptay (cadr pt1)
ptbx (car pt3)
ptby (cadr pt3)
pt2(list ptbx ptay)
pt4(list ptax ptby)
)
;;;;矩形四边组表
(setq linelst (list (list pt1 pt2)
(list pt1 pt4)
(list pt2 pt3)
(list pt3 pt4)
)
)
;;;获取距控制点最近的边
(setq linelst
(vl-sort linelst
(function
(lambda (e1 e2)
(< (point_line pt (car e1) (cadr e1))
(point_line pt (car e2) (cadr e2))
)
)
)
)
)
;;;计算中点
(setq pt5 (mpt (car (car linelst)) (cadr (car linelst))))
;;;获取距中点距离最大的点
(setq ptlist (vl-sort ptlist
(function
(lambda (e1 e2)
(> (distance pt5 e1) (distance pt5 e2))
)
)
)
)
;;;作图,在这里可以对图层线型进行控制
(command "_.line" (car ptlist) pt5 (cadr ptlist) "")
)
yzr2002626
发表于 2011-6-26 17:21:00
先前那我表达错了,意思是那矩形是拉框画的,不是选择矩形