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

先前那我表达错了,意思是那矩形是拉框画的,不是选择矩形
页: 1 2 3 [4] 5 6 7 8
查看完整版本: 【求助】请大侠门来编一个这样的程序!