lijiao 发表于 2016-9-30 11:09:41

grread函数精确输入的方法

grread函数的应用非常广泛,论坛里的例子也不少。
grread函数也有不足,就是精确输入,比如通过grread函数拖动输入一个距p1点距离为12.5的点,做起来还是有难度的。
这里自定义了一个函数,可以解决这个问题:
(defun cs-int-grdata (lst / FLAG)
(cond
    ((= (type lst) 'list)
   (mapcar 'cs-int-grdata lst)
   )
    ((member (type lst) '(int REAL))
   (setq flag 0)
   (and (ACET-SYS-CONTROL-DOWN) (setq flag (+ flag 2)))
   (and (ACET-SYS-SHIFT-DOWN) (setq flag (+ flag 4)))
   (CS-INT lst (cdr (assoc flag '((0 . 0.1) (2 . 0.5) (4 . 5) (6 . 10)))))
   )
    (t lst)
    )
)其中的CS-INT函数,请参考
http://bbs.mjtd.com/thread-173452-grread函数 1-1.html
用grread函数拖动,得出的坐标点或距离或角度等数不一定是我们想要的数据,如果加入cs-int-grdata函数进行处理,就很容易得到我们想要的数据
示例:
(defun tt (p1 / DIS PT)
(princ "\n")
(while (/= 3 (car (setq pt (grread t 4 0))))
    (if(= 5 (car pt))
      (progn
(setq pt (cadr pt))
(setq dis (cs-int-grdata (distance p1 pt)))
(redraw)
(grdraw p1 pt 1 1)
(princ (strcat "\r距离为:" (rtos dis)))
      )
    )
)
(princ "\r")
(redraw)
(if (= 3 (car pt))
    (setq dis (cs-int-grdata (distance p1 (cadr pt))))
)
)运行函数tt时,只拖动鼠标,命令行提示的距离按0.1进行圆整
                     拖动鼠标的同时,按下ctrl键,命令行提示的距离按0.5进行圆整
                     拖动鼠标的同时,按下shift键,命令行提示的距离按5进行圆整
                     拖动鼠标的同时,按下shift和Ctrl键,命令行提示的距离按10进行圆整

lijiao 发表于 2016-10-2 20:38:15

皇上快溜 发表于 2016-10-1 22:00
楼主可以可以帮忙搞个,任意两点求整数,然后点选目标做偏移的程序么?

应该叫做动态偏移,我有一个做好的,只是和其他程序在一起,很难单独剥离出来。
其实,做一个动态偏移的程序并不难,偏移一个实体,无外乎需要三个输入,一是选择实体,二是确定偏移方向,三是确定偏移距离。
第一个可以用entsel函数,后面两个可以用grread函数动态实现

luyu9635 发表于 2016-10-8 10:55:55

lijiao 发表于 2016-10-8 08:59
[系统本身的拉伸命令太弱了]
不知道哪些方面弱?你希望的拉伸命令是什么样子?能不能谈谈你的想法?
只 ...

如图所示,比如我要拉伸图中的那条红色边,又要不选到共它对象,且拉伸的方向不变,拉伸到绿色边的位置,当然这个距离是可控的,这个用系统实现就比较繁琐了

lijiao 发表于 2016-10-8 08:59:43

luyu9635 发表于 2016-10-7 22:45
大神能做一个任意角度的动态点选拉伸吗,非正交的拉伸,系统本身的拉伸命令太弱了,这个可能很有用

[系统本身的拉伸命令太弱了]
不知道哪些方面弱?你希望的拉伸命令是什么样子?能不能谈谈你的想法?
只要想法定下来了,接下来就是实现手段的事。

smartstar 发表于 2016-9-30 13:41:08

顶一下!学习学习。

伪书虫86 发表于 2016-10-1 15:51:34

有点意思啊

皇上快溜 发表于 2016-10-1 22:00:20

楼主可以可以帮忙搞个,任意两点求整数,然后点选目标做偏移的程序么?

皇上快溜 发表于 2016-10-2 20:51:18

lijiao 发表于 2016-10-2 20:38
应该叫做动态偏移,我有一个做好的,只是和其他程序在一起,很难单独剥离出来。
其实,做一个动态偏移的 ...

谢谢回复,,,,,

luyu9635 发表于 2016-10-7 22:45:36

lijiao 发表于 2016-10-2 20:38
应该叫做动态偏移,我有一个做好的,只是和其他程序在一起,很难单独剥离出来。
其实,做一个动态偏移的 ...

大神能做一个任意角度的动态点选拉伸吗,非正交的拉伸,系统本身的拉伸命令太弱了,这个可能很有用

luyu9635 发表于 2016-10-8 10:39:44

lijiao 发表于 2016-10-2 20:38
应该叫做动态偏移,我有一个做好的,只是和其他程序在一起,很难单独剥离出来。
其实,做一个动态偏移的 ...

大神能做一个任意角度的动态点选拉伸吗,非正交的拉伸,系统本身的拉伸命令太弱了,这个可能很有用
页: [1] 2
查看完整版本: grread函数精确输入的方法