找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1515|回复: 3

[每日一码] SketchUP的角度盘的实现代码

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-11-3 21:17:57 | 显示全部楼层 |阅读模式

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

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

×
完整程序中间的角度盘模拟代码,没加上最后的旋转实体的代码。
该刻度盘不管屏幕如何滚轮缩放,始终保持屏幕高度的1/4大小、固定的显示在屏幕内,见演示...

函数 XD::Block:MakeAngleScale 见函数发布源代码: http://bbs.xdcad.net/thread-671403-1-1.html

xdtb_anglescale.gif



  1. (defun c:tt ()                              
  2.   (defun callback1 (dynpt)
  3.     (setq newvs (getvar "viewsize")
  4.           scl (/ newvs 5.0)
  5.           scl-2 (list scl scl scl)
  6.     )
  7.     (if (/= newvs oldvs1)
  8.       (progn
  9.         (xdrx_setpropertyvalue ent "ScaleFactors" scl-2)
  10.       )
  11.     )
  12.     (if (not (equal dynpt lastPnt 1e-3))
  13.       (xdrx_setpropertyvalue ent "Position" dynpt)
  14.     )
  15.     (setq oldvs1 newvs)
  16.     (setq lastPnt dynpt)
  17.   )
  18.   (defun callback2 (dynpt / newvs oldvs1 scl scl-2 v)
  19.     (if (= (setq count (rem count 2))
  20.            0
  21.         )
  22.       (xdrx_grdraw -2 1 basept dynpt)
  23.       (progn
  24.         (xdrx_grdraw -2 1 basept basept1)
  25.       )
  26.     )
  27.     (setq count (1+ count))
  28.     (setq newvs (getvar "viewsize")
  29.           scl (/ newvs 5.0)
  30.           scl-2 (list scl scl scl)
  31.     )
  32.     (if (/= newvs oldvs1)
  33.       (progn
  34.         (xdrx_setpropertyvalue ent "ScaleFactors" scl-2)
  35.       )
  36.     )
  37.     (setq oldvs1 newvs)
  38.     (setq ang (angle basept dynpt))
  39.     (if (not (equal basept1 dynpt 1e-3))
  40.       (xdrx_setpropertyvalue ent "rotation" ang)
  41.       (progn
  42.         (if (= (rem count 2) 0)
  43.           (progn
  44.             (xdrx_grdraw -2 1 basept dynpt)
  45.             (setq count 1)
  46.           )
  47.         )
  48.       )
  49.     )
  50.     (setq basept1 dynpt)
  51.   )
  52.   (defun callback3 (dynpt)
  53.     (if (not (equal basept1 dynpt 1e-3))
  54.       (progn
  55.         (setq v (xdrx_vector_normalize (mapcar
  56.                                          '-
  57.                                          dynpt
  58.                                          basept
  59.                                        )
  60.                 )
  61.         )
  62.         (xdrx_setpropertyvalue ent1 "UnitDir" v)
  63.       )
  64.     )
  65.     (setq basept1 dynpt)
  66.   )
  67.   (setq basept1 (xdrx_document_GetMouseCoord)
  68.         oldvs (getvar "viewsize")
  69.         oldvs1 oldvs
  70.         count 0
  71.         scl-l1 '(1.0 1.0 1.0)
  72.         mat0 (xdrx_matrix_identity 3)
  73.         height (/ oldvs 5.0)
  74.         ss (ssadd)
  75.   )
  76.   (setq ent (XD::Block:MakeAngleScale '(0 0 0)))
  77.   (xdrx_setpropertyvalue ent "ScaleFactors" (list height height height))
  78.   (setq ret (xdrx_PointMonitor "callback1" ent))
  79.   (if (setq basept (getpoint "\n角度标尺基点<退出>:"))
  80.     (progn
  81.       (setq ret (xdrx_PointMonitor "callback2" ent))
  82.       (ssadd ent ss)
  83.       (setq p2 (getpoint "\n基准轴第二点<退出>:"))
  84.       (xdrx_pointmonitor)
  85.       (if (= (rem count 2) 0)
  86.         (xdrx_grdraw -2 1 basept basept1)
  87.       )
  88.       (if p2
  89.         (progn
  90.           (setq v1 (xdrx_vector_normalize (mapcar '- p2 basept)))
  91.           (setq ent1 (xdrx_xline_make basept p2))
  92.           (xdrx_setpropertyvalue ent1 "color" 252)
  93.           (xdrx_pointMonitor "callback3" ent1)
  94.           (setq p3 (getpoint "\n旋转角<退出>:"))
  95.           (xdrx_entity_delete ent1)
  96.           (setq v2 (xdrx_vector_normalize (mapcar '- p3 basept)))
  97.           (setq ang (xdrx_vector_angle v2 v1))
  98.           (setq sang (angle p2 basept)
  99.                 eang (angle p3 basept)
  100.                 ang (rem (+ (* 2 pi)(- eang sang))(* 2 pi)))
  101.         )
  102.       )

  103.     )
  104.   )
  105.   (xdrx_pointmonitor)
  106. )




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-3 21:33:31 | 显示全部楼层
这个盘三维时是可以贴在指定的平面

点评

可以用 xdrx_setpropertyvalue 修改NORMAL,让它贴哪。  详情 回复 发表于 2013-11-3 21:40
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

 楼主| 发表于 2013-11-3 21:40:09 | 显示全部楼层
st788796 发表于 2013-11-3 21:33
这个盘三维时是可以贴在指定的平面

可以用 xdrx_setpropertyvalue 修改NORMAL,让它贴哪。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-11-4 01:32:19 | 显示全部楼层
恭喜API又升级了,感谢提供这么强大的代码。熟悉下新的函数,这几天抽空写几个。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-26 22:44 , Processed in 0.382779 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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