找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1691|回复: 0

[[coior=red]文档类] (XD::DOC:GetPoint)增强型的GETPOINT,支持方向约束

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2016-5-23 22:01:12 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::DOC:GetPoint
调用格式: (XD::DOC:GetPoint basePnt info clr ydir bothsides)
参数说明: basepnt ----- 基点(UCS)
info -------- 提示字符串
clr -------- 拖动线的颜色
mode -------- 0:拖动线实线 1:拖动线虚线
ydir -------- 方向约束向量(UCS),如果NIL,同普通
bothsides --- T 两个正交方向,NIL仅向量方向
GETPOINT(支持F8正交约束),如果给向量值,则仅能在这一个方向上选点
返回值: 点(UCS) or NIL or 关键字
函数简介: 增强型的GETPOINT,支持方向约束
程序初始化在VEC向量一个方向,中间可以通过按F8键改变为正交两个方向约束
函数来源: 原创
函数作者: Lispboy
适用版本: XDRX API 
最后更新时间: 2016-06-02
备注: 1、配合initget ,xdrx_initget 支持关键字并一键回车返回关键字
2、选点时候支持输入数字确定点

2016年6月2日第三版
演示图片: -

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

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

×
  1. (defun XD::DOC:GetPoint (basePnt info clr ydir bothsides / basePnt3 dis
  2.                                  basepnt2 dis2 dis3 dynpt lastPnts msg myerr
  3.                                  olderr pt pt1 pt2 pt3 v x-dir x-project
  4.                                  y-dir _callback con _drawOrthoVec
  5.                         )
  6.   (defun myerr (msg)
  7.     (princ (strcat "\n" msg))
  8.     (xdrx_pointmonitor)
  9.     (princ)
  10.   )
  11.   (defun _drawOrthoVec (x-dir y-dir)
  12.     (setq basePnt2 (mapcar
  13.                      '+
  14.                      basePnt
  15.                      (trans x-dir 0 1 2)
  16.                    )
  17.           basePnt3 (mapcar
  18.                      '+
  19.                      basePnt
  20.                      (trans y-dir 0 1 2)
  21.                    )
  22.           pt2 (XD::Pnts:OrthoProject (list dynpt) (trans basePnt 1 0)
  23.                                      (trans basePnt2 1 0)
  24.               )
  25.           dis2 (distance dynpt (car pt2))
  26.           pt3 (XD::Pnts:OrthoProject (list dynpt) (trans basePnt 1 0)
  27.                                      (trans basePnt3 1 0)
  28.               )
  29.           dis3 (distance dynpt (car pt3))
  30.     )
  31.     (if (< dis2 dis3)
  32.       (setq pt (car pt2)
  33.             x-project (trans x-dir 0 1 2)
  34.             basePnt2 basePnt2
  35.       )
  36.       (setq pt (car pt3)
  37.             x-project (trans y-dir 0 1 2)
  38.             basePnt2 basePnt3
  39.       )
  40.     )
  41.     pt
  42.   )
  43.   (defun _callback (dynpt)
  44.     (redraw)
  45.     (if ydir
  46.       (progn
  47.         (if (and (= 1 (XD::SYMBOL:Get '#XD-GLOBALVAR-DRAG-FREEORTHO))
  48.                  (= (getvar "orthomode") 0)
  49.             )
  50.           (progn
  51.             (if (= 0 (getvar "orthomode"))
  52.               (setq pt dynpt
  53.                     x-project nil
  54.               )
  55.               (progn
  56.                 (setq x-dir (getvar "ucsxdir")
  57.                       y-dir (getvar "ucsydir")
  58.                 )
  59.                 (setq pt (_drawOrthoVec x-dir y-dir))
  60.               )
  61.             )
  62.           )
  63.           (if (not bothsides)
  64.             (progn
  65.               (setq v (xdrx_vector_normalize (mapcar
  66.                                                '-
  67.                                                dynpt
  68.                                                (trans basePnt 1 0)
  69.                                              )
  70.                       )
  71.               )
  72.               (setq x-project ydir
  73.                     pt (car (XD::Pnts:OrthoProject (list dynpt)
  74.                                                    (trans basePnt 1 0)
  75.                                                    (trans basePnt2 1 0)
  76.                             )
  77.                        )
  78.               )
  79.             )
  80.             (progn
  81.               (setq x-dir vec
  82.                     y-dir (xdrx_vector_perpvector x-dir)
  83.               )
  84.               (setq pt (_drawOrthoVec x-dir y-dir))
  85.             )
  86.           )
  87.         )
  88.       )
  89.       (progn
  90.         (if (= 0 (getvar "orthomode"))
  91.           (setq pt dynpt
  92.                 x-project nil
  93.           )
  94.           (progn
  95.             (setq x-dir (getvar "ucsxdir")
  96.                   y-dir (getvar "ucsydir")
  97.             )
  98.             (setq pt (_drawOrthoVec x-dir y-dir))
  99.           )
  100.         )
  101.       )
  102.     )
  103.     (xdrx_grdraw clr con (trans basePnt 1 0) pt)
  104.     (if (not lastPnts)
  105.       (setq lastPnts (cons dynpt lastPnts))
  106.       (setq lastPnts (list dynpt (car lastPnts)))
  107.     )
  108.     (princ)
  109.   )
  110.   (setq olderr *error*)
  111.   (setq *error* myerr)
  112.   (xdrx_pointmonitor "_callback")
  113.   (setvar "lastpoint" basePnt)
  114.   (setq basePnt2 (mapcar
  115.                    '+
  116.                    basePnt
  117.                    (xdrx_vector_normalize ydir)
  118.                  )
  119.   )
  120.   (if (not clr)
  121.     (setq clr 1)
  122.   )
  123.   (if (minusp clr)
  124.     (setq con 0
  125.           clr (abs clr)
  126.     )
  127.     (setq con 1)
  128.   )
  129.   (if (setq dis (getpoint info))
  130.     (progn
  131.       (cond
  132.         ((= (type dis) 'LIST)
  133.           (if (not (equal (car lastPnts) (cadr lastPnts) 1e-3))
  134.             (progn
  135.               (if x-project
  136.                 (progn
  137.                   (setq pt1 (XD::Pnts:OrthoProject (list (car lastPnts))
  138.                                                    (trans basePnt 1 0)
  139.                                                    (trans basePnt2 1 0)
  140.                             )
  141.                         x-project (xdrx_vector_normalize (mapcar
  142.                                                            '-
  143.                                                            (trans
  144.                                                                   (car pt1)
  145.                                                                   0 1
  146.                                                            )
  147.                                                            basePnt
  148.                                                          )
  149.                                   )
  150.                         pt1 (mapcar
  151.                               '+
  152.                               basePnt
  153.                               (xdrx_vector_product x-project
  154.                                                    (distance (car lastPnts)
  155.                                                              (trans basePnt
  156.                                                                     1 0
  157.                                                              )
  158.                                                    )
  159.                               )
  160.                             )
  161.                   )
  162.                 )
  163.                 (setq pt1 (trans pt 0 1))
  164.               )
  165.             )
  166.             (setq pt1 (trans pt 0 1))
  167.           )
  168.         )
  169.         ((= (type dis) 'STR)
  170.           (setq pt1 dis)
  171.         )
  172.       )
  173.     )
  174.     (setq pt1 nil)
  175.   )
  176.   (xdrx_pointmonitor)
  177.   (setq *error* olderr)
  178.   (redraw)
  179.   pt1
  180. )

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

本版积分规则

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

GMT+8, 2024-11-25 08:07 , Processed in 0.224979 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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