找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 690|回复: 0

[求助]:阵列图块时,图块的动态显示,附一小程序(上一主题不能编辑,重发)

[复制链接]
发表于 2008-5-14 15:21:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
浩辰暖通中,阵列布置空调风口时,每个图块随着选择范围增大而动态显示,这样的功能用什么程序段实现?

下面的程序,是从他人的程序上改过来的,
(vl-load-com)
(defun C:TT (/ TEST SS TMP MODE PT PT0)
(setq el nil)
(setq p1 (getpoint "\n请点取风口的插入点>: "))
(setq TEST t)
(while TEST
(setq TMP (grread 4 2)
MODE (car TMP)
PT (cadr TMP)
) ; (princ MODE)
(cond
((= MODE 5) ;移动
(setq pt_mid (mapcar '+ p1 pt))
(setq pt_mid (mapcar '/ pt_mid '(2 2 2)))
(setq pt1 (list (nth 0 p1) (nth 1 pt)))
(setq pt2 (list (nth 0 pt) (nth 1 p1)))
(redraw)
(grdraw p1 pt1 7)
(grdraw pt1 pt 7)
(grdraw pt pt2 7)
(grdraw pt2 p1 7)
(if (/= el nil)
(entdel el)
)
(command "insert" "高效送风口GKF-05A" pt_mid 1 1 0)
(setq el (entlast))
)

((= MODE 3) ;左击
(entdel el)
(command "insert" "高效送风口GKF-05A" pt_mid 1 1 0)
(redraw)
(setq TEST NIL)
)
((= MODE 25) ;右击
(setq el (entlast))(entdel el)
(redraw)
(setq TEST NIL)
)
(t
;(princ (strcat "\r" (vl-princ-to-string TMP)))
)
)
)
(princ)
)
将其中的“高效送风口GKF-05A”改为你图中的图块名称就可以了,
请教高手,如何在选取第二个点时,能捕捉点,现在不能精确定位
由于在动态显示风口设备时(因插入图块命令)在命令窗口显示大量的插入图块的信息,现将显示图块用grdraw命令在一子程序中实现单一图块的动态显示,可将该子程序添加命令改成显示任意图的动态显示了程序,程序如下
(vl-load-com)
(defun show_blk        (blk_pt blK_w blk_h /)        ;动态显示单个风口
  (setq        pt_1 (list (- (nth 0 blk_pt) (/ blk_w 2))
                   (- (nth 1 blk_pt) (/ blk_h 2))
             )
  )
  (setq        pt_2 (list (nth 0 pt_1)
                   (+ (nth 1 pt_1) blk_h)
             )
  )
  (setq        pt_3         (list (+(nth 0 pt_2) blk_w)
                (nth 1 pt_2)
             )
  )
  (setq        pt_4 (list (+ (nth 0 pt_1)blk_w)
                   (nth 1 pt_1)
             )
  )
  (grdraw pt_1 pt_2 7)
  (grdraw pt_2 pt_3 7)
  (grdraw pt_3 pt_4 7)
  (grdraw pt_4 pt_1 7)
  (grdraw pt_3 pt_1 6)
  (grdraw pt_2 pt_4 6)
)
(defun C:TT2 (/ TEST SS TMP MODE PT PT0)
  (setq el nil)
  (setq p1 (getpoint "\n请点取风口的插入点>: "))
  (setq os (getvar "OSMODE"))
  (setq TEST t)
  (while TEST
    (setq TMP  (grread 4 2)
          MODE (car TMP)
          PT   (cadr TMP)
    )                                        ;        (princ MODE)
    (cond
      ((= MODE 5)                        ;移动
       (if (setq TMP (osnap PT "end")) ;_捕捉
         (progn
           (setq PT TMP)
           (grdraw PT (polar PT 0 1) 2) ;_显示标记
         )
       )
       (setq pt_mid (mapcar '+ p1 pt))
       (setq pt_mid (mapcar '/ pt_mid '(2 2 2)))
       (setq pt1 (list (nth 0 p1) (nth 1 pt)))
       (setq pt2 (list (nth 0 pt) (nth 1 p1)))
       (redraw)
       (grdraw p1 pt1 7)
       (grdraw pt1 pt 7)
       (grdraw pt pt2 7)
       (grdraw pt2 p1 7)
       ;|
       (if (/= el nil)
         (entdel el)
       )
       (command "insert" "高效送风口GKF-05A" pt_mid 1 1 0)
       (setq el (entlast))
       |;
       ;(princ "/n插入点:")
      ; (princ pt_mid)
       (setq blk_w 500)
       (setq blk_h 500)
       (show_blk pt_mid blk_w blk_h)
      )

      ((= MODE 3)                        ;左击
      ; (entdel el)
       (command "insert" "高效送风口GKF-05A" pt_mid 1 1 0)
       (redraw)
       (setq TEST NIL)
      )
      ((= MODE 25)                        ;右击
       (setq el (entlast))
       (entdel el)
       (redraw)
       (setq TEST NIL)
      )
      (t
                                        ;(princ (strcat "\r" (vl-princ-to-string TMP)))
      )
    )
  )
  (setvar "osmode" os)
  (princ)
)
请各位高手指点,由于在程序中第二点的选取中用osnap来达到了捕捉点的功能 ,却显示不出捕捉的的形式。请教如何才能显示出捕捉点形式。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-14 01:18 , Processed in 0.216806 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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