找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4651|回复: 18

[LISP函数]:强烈推荐!动点驱动的实现!!由静态变为动态就是这么简单!~请测试!

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-10-17 22:52:30 | 显示全部楼层 |阅读模式

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

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

×
fsxm:grread_drag动点驱动的实现
对于(fsxm:grread_drag '{expt pt **} '{expt2 **}中的pt实现实时驱动,
让你的程序充分的动态预朗变的如些容易!!!
现在在测试阶段敬请提出宝贵意见!多谢~
调用语法请见下面的例子~
注:{expt }中请不要出现交互函数如get**类

  1. ;;序号球对比test
  2. (defun mak_xhq (p1 p2 / dist k pp)
  3.   (cond        ((/= 0 (setq dist (distance p1 p2)))
  4.          (setq k (/ 5 dist))
  5.          (setq pp (mapcar '+ p2 (mapcar '* (mapcar '- p1 p2) (list k k k))))
  6.          (entmake (list        '(0 . "line")
  7.                         (cons 10 p1)
  8.                         (cons 11 pp)
  9.                   )
  10.          )
  11.          (entmake (list        '(0 . "circle")
  12.                         (cons 10 p2)
  13.                         '(40 . 5)
  14.                   )
  15.          )
  16.         )
  17.   )
  18. )
  19. (defun c:xhq ()                                ;静态
  20.   (setq p1 (getpoint "p1:"))
  21.   (setq p2 (getpoint p1 "p2:"))
  22.   (mak_xhq p1 p2)
  23.   (princ)
  24. )
  25. (defun c:xhq2 ()
  26.   (setq p1 (getpoint "p1:"))                ;半动态
  27.   (fsxm:grread_drag '(mak_xhq p1 pt) t)
  28.   (princ)
  29. )
  30. (defun c:xhq3 ()                        ;全动态
  31.   (princ "p1:")
  32.   (setq p1 (fsxm:grread_drag '(mak_xhq pt (mapcar '+ pt '(10 10))) t))
  33.   (repeat 2 (entdel (entlast)))
  34.   (fsxm:grread_drag '(mak_xhq p1 pt) t)
  35.   (princ)
  36. )
  37. ;;offset对比test
  38. (defun c:off ()                                ;静态
  39.   (setq en (entsel))
  40.   (setq pt (getpoint "p:"))
  41.   (command ".offset" "t" en pt "")
  42. )
  43. (defun c:off1 (/ en)                        ;动态
  44.   (setq en (entsel))
  45.   (fsxm:grread_drag  '(command ".offset" "t" en "non" pt "") t)
  46.   ;;下面的一句是错误的,因为出现了交互函数(entsel)
  47.   ;;(fsxm:grread_drag  '(command ".offset" "t" (entsel) "non" pt "") t)
  48. )
  49. ;;show_curid test
  50. (defun c:show_curid ()                        ;动态
  51.   (fsxm:grread_drag  '(princ (strcat "\r" (vl-princ-to-string pt))) t)
  52. )


从现在起要想动态预朗还要写一堆代码吗?不用了~
把getpoint 换为{动点驱动pt}再在前面加个{驱动函数fxm:grread_drag }
[/COLOR] 这一切就是这样简单!你信吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 208个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

 楼主| 发表于 2006-10-18 11:57:44 | 显示全部楼层
谢谢xshrimp  指出来
太大意了啦!忘了改函数名了哦!
getpoint2就是fsxm:grread_drag 啦!
因为在调试时用的是getpoint2(因为与getpoint有点像)
调试好了就改名为fsxm:grread_drag 了!
但后面的getpoint2忘了改掉了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8644个

财富等级: 富甲天下

发表于 2006-10-18 16:21:53 | 显示全部楼层
相当强,要是能结合前几天那个grreadosnap,支持捕捉就好了。另外,要是不愿公布源码的话能不能去掉加载时命令行的提示。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

 楼主| 发表于 2006-10-18 20:13:54 | 显示全部楼层
呵呵~这个程序当然是可以结合前几天那个grreadosnap的啦~自家人乍能不认自家人呢?pt 换为(setq pt (grreadosnap pt))不就成了啦!当然只是在程序外部作为参数加上就行了哈哈~
[/COLOR]
这个程序的通用性很强大,几乎所有动态方式都可以用这种全新的方法{动点驱动}
来由静态快速转变为动态方式!~而你要做的只是调用一个简单的{动点pt}就可以搞定[/COLOR]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-10-18 20:29:31 | 显示全部楼层
没有说明函数调用的参数意义,仿照 OFF1 写就是 Error

  1. (defun c:tt (/ ss pt)
  2.   (setq        ss (ssget)
  3.         pt (getpoint "\nP1: ")
  4.   )
  5.   (fsxm:grread_drag '(command ".move" "t" ss "non" pt "") t)
  6.   (princ)
  7. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

 楼主| 发表于 2006-10-18 21:05:04 | 显示全部楼层
最初由 eachy 发布
[B]没有说明函数调用的参数意义,仿照 OFF1 写就是 Error
(defun c:tt (/ ss pt)
  (setq        ss (ssget)
        pt (getpoint "\nP1: ")
  )
  (fsxm:grread_drag '(command ".move" "t" ss "non" pt "") t)
  (pr... [/B]


晕倒~~老大move当然不能与offset一样了啦~

  1. 标准move的写法:
  2. (defun c:tt ()
  3.   (setq        ss (ssget)
  4.         p1 (getpoint "p1")
  5.         p2 (getpoint "p2")
  6.   )
  7.   (command "move" ss "" p1 p2)
  8. )
  9. 因为move是以p1为准而ss与p1是变化的与平常不一样就这样写:
  10. 加入动点驱动:
  11. (defun c:tt2 ()
  12.   (setq ss (ssget))
  13.   ;;p2 (getpoint "p2")
  14.   (setvar "lastpoint" (getpoint "p1"))
  15.   (fsxm:grread_drag '(command "move" ss "" "@" pt) t)
  16. )




以下再来一个例子说明fsxm:grread_drag的用法:

  1. (defun c:daa ()                                ;最原始状态要选取两个点(getangle)
  2.   (setq en (car (entsel)))
  3.   (setq ang (getangle "ang:"))
  4.   (command "dimedit" "o" en "" (* ang (/ 180 pi)))
  5.   (princ)
  6. )


  7. (defun c:daa2 ()                        ;改成只用一点就行简化操作,现在还是静态的
  8.   (setq en (car (entsel)))
  9.   (setq pt (getpoint "pt:"))                ;这行下面不要了而用动点pt搞定
  10.   (setq p-13 (cdr (assoc 13 (entget en))))
  11.   (setq ang (angle pt p-13))                ;这行下面用pt驱动
  12.   (command "dimedit" "o" en "" (* ang (/ 180 pi))) ;这行下面用pt驱动
  13.   (princ)
  14. )


  15. (defun c:daa3 ()                        ;使用动点pt驱动使之成为动态
  16.   (setq en (car (entsel)))
  17.   ;;(setq pt (getpoint "pt:"))
  18.   (setq p-13 (cdr (assoc 13 (entget en))))
  19.   (fsxm:grread_drag
  20.     '(progn
  21.       (setq ang (angle pt p-13))        ;pt驱动
  22.       (command "dimedit" "o" en "" (* ang (/ 180 pi))) ;pt驱动
  23.      )
  24.     t
  25.   )
  26.   (princ)
  27. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2006-10-19 14:28:20 | 显示全部楼层
express里面不是有同样的函数么?楼主这个对拖动过程中键盘输入的捕捉无效,而且也无法从上次输入点拉皮筋线,还是不太实用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

 楼主| 发表于 2006-10-19 20:39:57 | 显示全部楼层
它山之石老兄~慢慢体会吧~哈哈~
小菜:
虽然我没用过express 但是还是知道它与fsxm:grread_drag  是不一样的~et中是对ss驱动的~但我这却是对自定义过程or函数实现驱动~
当然不是一样的
键盘输入的捕捉无效??
呵呵~不是无效的啦!只是我没有一下子全说明出来!
不信你将后面的(fsxm:grread_drag  '(command ".offset" "t" en "non" pt "") t)
中的T参数改为: '(alert "看见了吧?") 按下键盘会出现什么现象???
我这里是提供对函数的动态驱动效果~ 想不出来与什么橡皮线有什么关系??
只要你将"橡皮线函数"让pt驱动没有什么不可能达到的~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-19 23:20:44 | 显示全部楼层
fsxm兄,用gif.gif.gif或者其他抓图软件做个动画演示好么,谢谢:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-20 05:30:20 | 显示全部楼层
第一遍看得晕

创意很灵,不过对于这个用grread制作的新函数,
在使用格式上,请给予严格详细的函数格式使用说明


原以为(fsxm:grread_drag后面只要加个点就可以了,其实是需要一个命令表达式,表达式里需要包含一个点
这个点就是楼主所谓的动点   而且好像可以加两个表达式 。后一个可以用t来替代 。t的含义可能会有点花头

如果命令表达式里有选择的实体,那这个实体或(命令表达式生成的新实体)  可能以动态的形式出现。直到命令完成


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

使用道具 举报

发表于 2006-10-20 08:12:39 | 显示全部楼层
我也看着有点晕~
皮筋线的效果就是(getpoint (getpoint))的样子,可以实现极轴追踪,我一直觉得grread做不了这种效果,不知道楼主有没有办法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-20 10:49:37 | 显示全部楼层
对于(fsxm:grread_drag '{expt pt **} '{expt2 **}中的pt实现实时驱动,
注:{expt }中请不要出现交互函数如get**类

我看, {expt pt **} 里面对pt驱动,但是不能出现get×类,
       所以,就用  '{expt2 **} 来弥补。因此 '{expt2 **} 是可以支持get×类的函数。
从执行持续上,'{expt2 **}应该在'{expt pt  **} 的前面。当'{expt2 **} ==T ,支持grread的模拟捕捉。

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 10:16 , Processed in 0.317131 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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