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进行圆整
皇上快溜 发表于 2016-10-1 22:00
楼主可以可以帮忙搞个,任意两点求整数,然后点选目标做偏移的程序么?
应该叫做动态偏移,我有一个做好的,只是和其他程序在一起,很难单独剥离出来。
其实,做一个动态偏移的程序并不难,偏移一个实体,无外乎需要三个输入,一是选择实体,二是确定偏移方向,三是确定偏移距离。
第一个可以用entsel函数,后面两个可以用grread函数动态实现 lijiao 发表于 2016-10-8 08:59
[系统本身的拉伸命令太弱了]
不知道哪些方面弱?你希望的拉伸命令是什么样子?能不能谈谈你的想法?
只 ...
如图所示,比如我要拉伸图中的那条红色边,又要不选到共它对象,且拉伸的方向不变,拉伸到绿色边的位置,当然这个距离是可控的,这个用系统实现就比较繁琐了 luyu9635 发表于 2016-10-7 22:45
大神能做一个任意角度的动态点选拉伸吗,非正交的拉伸,系统本身的拉伸命令太弱了,这个可能很有用
[系统本身的拉伸命令太弱了]
不知道哪些方面弱?你希望的拉伸命令是什么样子?能不能谈谈你的想法?
只要想法定下来了,接下来就是实现手段的事。 顶一下!学习学习。 有点意思啊
楼主可以可以帮忙搞个,任意两点求整数,然后点选目标做偏移的程序么? lijiao 发表于 2016-10-2 20:38
应该叫做动态偏移,我有一个做好的,只是和其他程序在一起,很难单独剥离出来。
其实,做一个动态偏移的 ...
谢谢回复,,,,, lijiao 发表于 2016-10-2 20:38
应该叫做动态偏移,我有一个做好的,只是和其他程序在一起,很难单独剥离出来。
其实,做一个动态偏移的 ...
大神能做一个任意角度的动态点选拉伸吗,非正交的拉伸,系统本身的拉伸命令太弱了,这个可能很有用 lijiao 发表于 2016-10-2 20:38
应该叫做动态偏移,我有一个做好的,只是和其他程序在一起,很难单独剥离出来。
其实,做一个动态偏移的 ...
大神能做一个任意角度的动态点选拉伸吗,非正交的拉伸,系统本身的拉伸命令太弱了,这个可能很有用
页:
[1]
2