明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: luyu9635

[原创]动态拉伸接受输入和捕捉

    [复制链接]
发表于 2011-2-15 09:38:37 | 显示全部楼层
鼓励发原创,楼主好样的
发表于 2011-2-15 10:42:29 | 显示全部楼层
看看,学习中
发表于 2011-2-15 16:53:32 | 显示全部楼层
找了很久終於找到了
很棒的程式!!
感謝樓主!
发表于 2011-2-18 09:24:57 | 显示全部楼层
神贴必顶。。。。。
发表于 2011-2-18 19:47:34 | 显示全部楼层
回复 luyu9635 的帖子

楼主你好,我用的是CAD2010,加载之后CAD提示”错误: 函数错误: 959“
是怎么回事啊,该怎么修改,谢谢!
发表于 2011-2-19 14:43:56 | 显示全部楼层
回复 luyu9635 的帖子

楼主你好,我用的是CAD2010,加载之后CAD提示”错误: 函数错误: 959“
是怎么回事啊,该怎么修改,谢谢!
发表于 2011-2-20 13:30:13 | 显示全部楼层
楼主我爱死你了
发表于 2011-2-20 17:24:07 | 显示全部楼层
不错不错,,我把你接受捕捉部分改进了一下,,这样好多了,,
还有一些没有加上,,要的就自己加上了,,\
就是不能捕捉到垂直,,谁能再改一下啊..
(defun c:tt ()
  (setq z T)
  (while z
    (initget 128)
    (setq grr (grread t)) ;请求输入
    (setq gr (car grr)
          po (cadr grr)
    )
    (cond ((equal grr '(2 15)) ;F8切换正交开关
           (if (= f8 0)
             (progn (setq f8 1) (prompt "\n<正交 开>"))
             (progn (setq f8 0) (prompt "\n<正交 关>"))
           )
           (setvar 'orthomode f8)
          )
          ((= gr 5) ;移动时
           (setq po (grreadosnap po)) ;更新
          )
          ((= gr 3) ;左击
           (setq z nil)
          )
          ((or (equal grr '(2 32)) ;空格
               (equal grr '(2 13)) ;回车
               (equal grr '(11 0)) ;右击
           )
           (setq z nil)
          )
    )
  )
)
(defun grbox (pt str1 / h p1 p2 p3 p4)
  (setq        h      (* (/ (getvar "viewsize") (cadr (getvar "screensize"))) (getvar "pickbox"))
        p1     (mapcar '- pt (list h h 0.))
        p2     (mapcar '+ pt (list h (- h) 0.))
        p3     (mapcar '+ pt (list h h 0.))
        p4     (mapcar '+ pt (list (- h) h 0.))
        p5     (mapcar '- pt (list h 0 0.))
        p6     (mapcar '- pt (list 0 h 0.))
        p7     (mapcar '+ pt (list 0 h 0.))
        p8     (mapcar '+ pt (list h 0. 0.))
        p8a    (mapcar '+ pt (list (1- h) 0. 0.))
        $angis 0.20944
        i      0
  )  
  (cond        ((= str1 1) (grvecs (list 1 p1 p2 1 p2 p3 1 p3 p4 1 p4 p1)))
        ((= str1 2) (grvecs (list 1 p7 p1 1 p7 p2 1 p1 p2)))
        ((= str1 4)
          (repeat 30
            (setq p9 (polar pt $angis h))
            (grvecs (list 1 p8 p9))
            (setq p8         p9
                  $angis (+ $angis 0.20944)
            )
          )
        )
        ((= str1 8)   (grvecs (list 1 p1 p2 1 p2 p3 1 p3 p4 1 p4 p1)))
        ((= str1 16)  (grvecs (list 1 p5 p6 1 p6 p8 1 p8 p7 1 p7 p5)))
        ((= str1 32)  (grvecs (list 1 p1 p3 1 p2 p4)))
        ((= str1 64)  (grvecs (list 1 p1 p2 1 p2 p3 1 p3 p4 1 p4 p1)))
        ((= str1 128) (grvecs (list 1 p1 p2 1 p1 p4 1 pt p5 1 pt p6)))
        ((= str1 256)
          (repeat 30
            (setq p9 (polar pt $angis (1- h)))
            (grdraw  p8a p9 1)
            (setq p8a         p9
                  $angis (+ $angis 0.20944)
            )
          )
         (grdraw p3 p4 1)
        )
        ((= str1 512)  (grvecs (list 1 p1 p2 1 p2 p4 1 p3 p4 1 p3 p1)))
        ((= str1 2048) (grvecs (list 1 p1 p2 1 p2 p3 1 p3 p4 1 p4 p1)))
        ((= str1 4096) (grvecs (list 1 p1 p2 1 p2 p3 1 p3 p4 1 p4 p1)))
        ((= str1 8192) (grvecs (list 1 p1 p2 1 p2 p3 1 p3 p4 1 p4 p1)))
  )
)
(defun grreadosnap (p / osp osmode str)
  ;;grreadosnap ---fsxm 2006.10.06
  (setq osmode (getvar "osmode"))
  (cond        ((= osmode 0))
        ((< osmode 16384)
         (setq str "")
         (foreach x '((1 "_end,")
                      (2 "_mid,")
                      (4 "_cen,")
                      (8 "_nod,")
                      (16 "_qua,")
                      (32 "_int,")
                      (64 "_ins,")
                      (128 "_per,")
                      (256 "_tan,")
                      (512 "_nea,")
                      (2048 "_app,")
                      (4096 "_ext,")
                      (8192 "_par,")
                     )
           (if (/= 0 (logand osmode (car x)))
             (setq str (strcat str (cadr x)))
           )
         )
         (setq osp (osnap p str))
         (setq str1 nil)
         (cond ((and (/= 0 (logand osmode 1)) (equal osp (osnap p "_end,"))) (setq str1 1))
               ((and (/= 0 (logand osmode 2)) (equal osp (osnap p "_mid,"))) (setq str1 2))
               ((and (/= 0 (logand osmode 4)) (equal osp (osnap p "_cen,"))) (setq str1 4))
               ((and (/= 0 (logand osmode 8)) (equal osp (osnap p "_nod,"))) (setq str1 8))
               ((and (/= 0 (logand osmode 16)) (equal osp (osnap p "_qua,"))) (setq str1 16))
               ((and (/= 0 (logand osmode 32)) (equal osp (osnap p "_int,"))) (setq str1 32))
               ((and (/= 0 (logand osmode 64)) (equal osp (osnap p "_ins,"))) (setq str1 64))
               ((and (/= 0 (logand osmode 128)) (equal osp (osnap p "_per,"))) (setq str1 128))
               ((and (/= 0 (logand osmode 256)) (equal osp (osnap p "_tan,"))) (setq str1 256))
               ((and (/= 0 (logand osmode 512)) (equal osp (osnap p "_nea,"))) (setq str1 512))
               ((and (/= 0 (logand osmode 2048)) (equal osp (osnap p "_app,"))) (setq str1 2048))
               ((and (/= 0 (logand osmode 4096)) (equal osp (osnap p "_app,"))) (setq str1 4096))
               ((and (/= 0 (logand osmode 8192)) (equal osp (osnap p "_par,"))) (setq str1 8192))               
         )
         (redraw)
         (cond (osp str1(setq p osp) (grbox osp str1)))
        )
  )
  p
)
发表于 2011-3-21 12:55:09 | 显示全部楼层
回复 luyu9635 的帖子

楼主你好,我用的是CAD2010,加载之后CAD提示”错误: 函数错误: 959“
是怎么回事啊,该怎么修改,谢谢!
发表于 2011-4-12 11:42:45 | 显示全部楼层
话说非常不错,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-27 15:33 , Processed in 0.197063 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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