找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1809|回复: 6

[[coior=red]文档类] (XD::Doc:GetPolygon)取点

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2014-10-29 11:42:50 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Doc:GetPolygon
调用格式: (XD::Doc:GetPolygon info1 info2 col)
参数说明: info1 -- 第一点提示字符串 or nil
info2 -- 第二点及以后提示字串 or nil
col -- 颜色 or nil
返回值:
函数简介: 取点
函数来源: 原创
函数作者: eachy
适用版本: XDRX API 
最后更新时间: 2014-11-04
备注: 2016.0708更新,支持鼠标移动和取点的函数回调CALLBACK
演示图片:

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

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

×
  1. ;|
  2. info1 -- 第一点提示字符串
  3. info2 -- 第二点及以后提示字串
  4. col -- 颜色 , 负数实线,正整数虚线
  5. |;
  6. (defun XD::Doc:GetPolygon (info1 info2 col / bp con fuzz i ll myerr olderr p
  7.                                  pickmode pnt ptl pts ret ret1 tf tf1 x
  8.                           )
  9.   (defun _pnt:projectOnAxis (bp pnt /)
  10.     (if (zerop (getvar "orthomode"))
  11.       pnt
  12.       (if (or
  13.             (< (* pi 0.25) (angle bp pnt) (* 0.75 pi))
  14.             (< (* pi 1.25) (angle bp pnt) (* 1.75 pi))
  15.           )
  16.         (list (car bp) (cadr pnt) 0.)
  17.         (list (car pnt) (cadr bp) 0.)
  18.       )
  19.     )
  20.   )
  21.   (defun myerr (msg)
  22.     (princ "\r*cancel*")
  23.     (xdrx_pointmonitor)
  24.     (xdrx_sysvar_pop)
  25.     (redraw)
  26.     (princ)
  27.   )
  28.   (defun _grdraw (pts /)
  29.     (if (>= (length pts) 2)
  30.       (progn
  31.         (redraw)
  32.         (apply
  33.           'xdrx_grdraw
  34.           (cons col (cons con pts))
  35.         )
  36.         (xdrx_grdraw col con (car pts) (last pts))
  37.       )
  38.     )
  39.   )
  40.   (defun callback (p / ll)
  41.     (if ptl
  42.       (progn                               ; (princ "\r")
  43.                                        ; (princ (trans p 0 1))
  44.         (_grdraw (cons (trans (_pnt:projectOnAxis (car ptl) (trans p 0 1)) 1
  45.                               0
  46.                        ) (mapcar
  47.                            '(lambda (x)
  48.                               (trans x 1 0)
  49.                             )
  50.                            ptl
  51.                          )
  52.                  )
  53.         )
  54.         (if (and
  55.               (> (length ptl) 1)
  56.               (equal (trans p 0 1) (last ptl) fuzz)
  57.             )
  58.           (xdrx_document_sendCmdStr "\n")
  59.         )
  60.         (if (and
  61.               (= (type #XD-VAR-FUNC-DRAG-MOUSEMove-CallBack) 'STR)
  62.               (= (type (eval (read #XD-VAR-FUNC-DRAG-MOUSEMove-CallBack))) 'SUBR)
  63.             )
  64.           (eval (list (read #XD-VAR-FUNC-DRAG-MOUSEMove-CallBack) (read "p")))
  65.         )
  66.       )
  67.     )
  68.   )                                       ; main
  69.   (setq olderr *error*
  70.         *error* myerr
  71.         tf t
  72.         tf1 t
  73.         fuzz (XD::Doc:GetPickBoxHeight)
  74.   )
  75.   (if (not col)
  76.     (setq col 1)
  77.   )
  78.   (if (minusp col)
  79.     (setq con 0
  80.           col (abs col)
  81.     )
  82.     (setq con 1)
  83.   )
  84.   (xdrx_pointmonitor "callback")
  85.   (xdrx_sysvar_push '("apbox" 1))
  86.   (princ (getvar "apbox"))
  87.   (setq i 0)
  88.   (while (and
  89.            tf
  90.            (progn
  91.              (setq ret (getpoint (if tf1
  92.                                    (if info1
  93.                                      (strcat "\n" info1 "<退出>: ")
  94.                                      "\n第一点<退出>: "
  95.                                    )
  96.                                    (if (> i 1)
  97.                                      (progn
  98.                                        (initget 128 "U")
  99.                                        (xdrx_initget 128 "U")
  100.                                        (if info2
  101.                                          (strcat "\r" info2 "[回退(U)]<退出>: ")
  102.                                          "\r下一点[回退(U)]<退出>: "
  103.                                        )
  104.                                      )
  105.                                      (if info2
  106.                                        (strcat "\n" info2 "<退出>: ")
  107.                                        "\n下一点<退出>: "
  108.                                      )
  109.                                    )
  110.                                  )
  111.                        )
  112.              )
  113.            )
  114.          )
  115.     (cond
  116.       ((= ret "U")
  117.         (setq ret1 ret)
  118.         (if (> (length ptl) 1)
  119.           (setq ret (cadr ptl)
  120.                 ptl (cdr ptl)
  121.           )
  122.         )
  123.         (setq i (1- i))
  124.         (if (= i 1)
  125.           (setq tf1 nil)
  126.         )
  127.       )
  128.       ((= (type ret) 'LIST)
  129.         (setq ret1 ret)
  130.         (setq i (1+ i))
  131.         (setq tf1 nil)
  132.         (if (and
  133.               ptl
  134.               (equal ret (last ptl) fuzz)
  135.             )
  136.           (setq tf nil)
  137.         )
  138.         (setq pickmode tf)
  139.         (if ptl
  140.           (setq ptl (cons (_pnt:projectOnAxis (car ptl) ret) ptl))
  141.           (setq ptl (cons ret ptl))
  142.         )
  143.       )
  144.       (t
  145.         nil
  146.       )
  147.     )
  148.     (if (and
  149.           (= (type #XD-VAR-FUNC-DRAG-MOUSELeftClick-CallBack) 'STR)
  150.           (= (type (eval (read #XD-VAR-FUNC-DRAG-MOUSELeftClick-CallBack))) 'SUBR)
  151.         )
  152.       (eval (list (read #XD-VAR-FUNC-DRAG-MOUSELeftClick-CallBack) (read "ret1")))
  153.     )
  154.   )
  155.   (setq *error* olderr)
  156.   (xdrx_sysvar_pop)
  157.   (xdrx_pointmonitor)
  158.   (redraw)
  159.   (if (not tf)
  160.     (setq ptl (reverse (cdr ptl)))
  161.     (setq ptl (reverse ptl))
  162.   )
  163.   (if (> (length ptl) 2)
  164.     ptl
  165.     nil
  166.   )
  167. )





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

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2014-10-29 23:55:23 | 显示全部楼层
更新, 支持自定义虚线颜色
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2014-11-4 15:56:15 | 显示全部楼层
更新
1 支持 实显或虚显
2 支持回退
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-1-9 19:22:45 | 显示全部楼层
不能使用 覺得沒有效果

点评

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2015-1-9 20:01:43 | 显示全部楼层
sahe 发表于 2015-1-9 19:22
不能使用 覺得沒有效果

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

使用道具 举报

发表于 2015-1-9 20:37:45 | 显示全部楼层
新手,好多都看不懂
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2016-7-8 14:06:46 | 显示全部楼层
2016.0708更新该函数, 回调函数,回调函数通过 (XD::Drag:SetMouseMoveCallBack ...)和(XD::Drag:SetMouseClickCallBack ....)设置。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 00:33 , Processed in 0.401612 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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