明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 968|回复: 1

[提问] 有点问题,请指点:

[复制链接]
发表于 2015-1-11 11:09:53 | 显示全部楼层 |阅读模式
本帖最后由 pannelchen 于 2015-1-12 14:22 编辑

;问题:
;按esc键值留在屏上


 楼主| 发表于 2015-1-12 14:28:30 | 显示全部楼层
  1. ;问题:
  2. ;按esc键值留在屏上
  3. ;自定义粗糙值只输入数字没有搞定.

  4. (defun c:rough_mech()
  5.   (princ "\n表面粗糙度标注程序")
  6.         (setvar "cmdecho" 0)
  7.         (setq os (getvar "OSMODE"))
  8.         (setvar "OSMODE" 0)
  9.         (setq hh (getvar "textsize"))
  10.         (setq ccd_t "3.2")
  11.         (setq roughtype "1")
  12.         (repeat 99
  13.          (initialize_rough)
  14.          (roughdraw)
  15.          (move_rough)
  16.          )         
  17.         (setvar "cmdecho" 1)
  18.         (setvar "osmode" os)
  19.         (prin1)
  20. )
  21. (prompt "c:rough_mech表面粗糙度")
  22. (prin1)


  23. (defun set_ccd()
  24.         (initget "H h c C 1 2 3")
  25.         (setq type_t (strcat "\n设置粗糙度标注类型或字高【字高(H)/去除材料(1)/不去除材料(2)/任意(3)】<1>:"))
  26.         (setq dimtype (getkword type_t))
  27.    (if (= dimtype nil) (set_ccd))
  28.         (cond ( (or (= dimtype "H") (= dimtype "h"))
  29.                      (set_ccdh)                        
  30.                 )
  31.         ((= dimtype "1")  (setq roughtype "1") )
  32.         ((= dimtype "2")  (setq roughtype "2")  )  
  33.                     ((= dimtype "3")  (setq roughtype "3")  )
  34.    )
  35.         )

  36. (defun set_ccdh()
  37.          (setq hht (getvar "textsize"))
  38.          (setq str_hh (strcat"\n文字高度<"(rtos hht)">:"))
  39.          (setq hh (getdist str_hh))
  40.          (if (= hh nil) (setq hh hht))  ;设置为默认
  41.          (setvar "textsize" hh)                     
  42. )       

  43. (defun  initialize_rough()
  44.         (setq pa '(0 0))  ;插入点
  45.         (setq h  (* (/ hh  2) 3))
  46.   (setq 2h (* 2 h))
  47.         (setq lb (/ h (sin (/ pi 3))))  
  48.         (setq lc (/ 2h (sin (/ pi 3))))
  49.   (setq pb (polar pa (* (/ pi 3) 2 ) lb)) ;左端点
  50.   (setq pc (polar pa  (/ pi 3)  lc) )  ;右
  51.   (setq pd (polar pa  (/ pi 3)  lb))  ;右中
  52.         (setq tc (polar pa (* pi 0.5) (* h 1.5)))
  53.         (setq cc (polar pa (* pi 0.5) (* (/ h 3) 2)))
  54. )

  55.   
  56.                  

  57. (defun roughdraw()
  58.         (cond
  59.         ((= roughtype "1")  (rough1) )
  60.         ((= roughtype "2")  (rough2)  )  
  61.                     ((= roughtype "3")  (rough3)  )
  62.         )
  63. )

  64. (defun rough1()
  65.         ;;;下面的相当重要,做图块
  66.           (entmake (list '(0 . "BLOCK") (cons 2 "*U") '(70 . 1) (cons 10 pa)))  ;*u无块名,70插入行数,10插入点
  67.           (entmake (list '(0 . "LINE") (cons 10 pa) (cons 11 pb)))   ;
  68.     (entmake (list '(0 . "LINE") (cons 10 pa) (cons 11 pc)))     
  69.     (entmake (list '(0 . "LINE") (cons 10 pb) (cons 11 pd)))
  70.           (setq blk (entmake '((0 . "ENDBLK"))))  ;块命令结束
  71.           ;;;;;;;分隔线.
  72.                 (entmake (list '(0 . "INSERT") (cons 10  pa) (cons 2 blk)))  ;10插入点,2图块名称
  73.     (setq ename0 (entlast))   
  74.     (setq edata0 (entget ename0))     
  75.                            (entmake (list '(0 . "TEXT") (cons 10 tc) (cons 11 tc) (cons 40  hh) '(62 . 3)'(72 . 4) '(41 . 0.8) (cons 1  ccd_t) ));10第一对齐点,11第二对齐点,62颜色,72水平文字中央对正4代表中央,1文字内容
  76.                   (setq ename1 (entlast))   
  77.       (setq edata1 (entget ename1))        
  78. )

  79. (defun rough2()
  80.          (entmake (list '(0 . "BLOCK") (cons 2 "*U") '(70 . 1) (cons 10 pa)))  ;*u无块名,70插入行数,10插入点
  81.           (entmake (list '(0 . "LINE") (cons 10 pa) (cons 11 pb)))   ;
  82.     (entmake (list '(0 . "LINE") (cons 10 pa) (cons 11 pc)))     
  83.     (entmake (list '(0 . "CIRCLE") (cons 10  cc) (cons 40  (/ h 3))));10中心点,40半径       
  84.          (setq blk (entmake '((0 . "ENDBLK"))))  
  85.                   (entmake (list '(0 . "INSERT") (cons 10  pa) (cons 2 blk)))  ;10插入点,2图块名称
  86.      (setq ename0 (entlast))   
  87.     (setq edata0 (entget ename0))                 
  88.           (entmake (list '(0 . "TEXT") (cons 10 tc) (cons 11 tc) (cons 40  hh) '(62 . 3)'(72 . 4) '(41 . 0.8) (cons 1  ccd_t) ));10第一对齐点,11第二对齐点,62颜色,72水平文字中央对正4代表中央,1文字内容
  89.     (setq ename1 (entlast))   
  90.     (setq edata1 (entget ename1))        
  91. )

  92. (defun rough3()
  93.          (entmake (list '(0 . "BLOCK") (cons 2 "*U") '(70 . 1) (cons 10 pa)))  ;*u无块名,70插入行数,10插入点
  94.          (entmake (list '(0 . "LINE") (cons 10 pa) (cons 11 pb)))   ;
  95.    (entmake (list '(0 . "LINE") (cons 10 pa) (cons 11 pc)))  
  96.    (setq blk (entmake '((0 . "ENDBLK"))))
  97.         ;;;;;;;分隔线.
  98.   (entmake (list '(0 . "INSERT") (cons 10  pa) (cons 2 blk)))  ;10插入点,2图块名称
  99.   (setq ename0 (entlast))   
  100.   (setq edata0 (entget ename0))     
  101.   (entmake (list '(0 . "TEXT") (cons 10 tc) (cons 11 tc) (cons 40  hh) '(62 . 3) '(72 . 4) '(41 . 0.8) (cons 1  ccd_t) ));10第一对齐点,11第二对齐点,62颜色,72水平文字中央对正4代表中央,1文字内容
  102.         (setq ename1 (entlast))   
  103.   (setq edata1 (entget ename1))
  104. )

  105.        

  106.        
  107. (defun move_rough()
  108.                 ;**************************************明经代码
  109. (prompt "\n指定基点/【取值0-9)】/【S设置类型】<指定基点>:")
  110. (setq tag T)                            ;;;设定跳出while循环的标志
  111. (while tag
  112.   (setq code (grread T 8 ))              ;;;读取输入
  113.   (setq mod (car code))   ;;;取得输入模式
  114.     (cond
  115.       ((= mod 5)                  (do_move)                )     ;;左键动作程序
  116.                     
  117.                  ((= mod 3)                        
  118.                                 (setq tag nil)               
  119.                             (setq ipt0 (cadr code))
  120.               ) ;;;如果鼠标左键点击,则设定while循环结束
  121.                  ((or (= mod 11 ) (= mod 25) ) (setq tag nil)) ;右键或右键设为enter.
  122.      ((= mod 2)     (do_keybd)  )            ;;;处理键盘
  123.      (T                           );;;处理其它情况
  124.     )  ;;cond
  125. )   ;;;while
  126. )

  127. ;;;;鼠标捕捉函数,捕捉对象,并与之垂直.
  128. (defun do_move()
  129.         (setq ipt0 (cadr code))
  130.         (entdel ename0 )
  131.         (entdel ename1)
  132.         (setq neapt (osnap ipt0 "nea")) ;;;取得最近的捕捉点
  133.         (entdel ename0 )
  134.         (entdel ename1)   ;用entdel可解决图块跳动
  135.         (if neapt
  136.                 (progn
  137.             (setq ang1 (angle  neapt ipt0))
  138.                         (setq ang (- ang1 (* pi 0.5)))
  139.                         (cond ((= ang1 0  ) (setq ang2 (+ ang pi)))
  140.                                     ((< 0 ang1 pi) (setq ang2 ang) )
  141.                                     ((= ang1 pi) (setq ang2 ang) )
  142.                                           ((< pi ang1 (* pi 2)) (setq ang2 (- ang pi )))
  143.                         )
  144.                         (setq pa neapt)
  145.                         (setq tc (polar pa ang1 (* h 1.5)))
  146.       (setq edata0 (subst (cons 10 neapt) (assoc 10 edata0) edata0))  ;图块插入点替换
  147.                         (setq edata0 (subst (cons 50 ang) (assoc 50 edata0) edata0))  ;图块插入点替换
  148.                         (setq edata1 (subst (cons 10 tc) (assoc 10 edata1) edata1))  ;图块插入点替换
  149.                         (setq edata1 (subst (cons 11 tc) (assoc 11 edata1) edata1))  ;图块插入点替换
  150.                         (setq edata1 (subst (cons 50 ang2) (assoc 50 edata1) edata1))  ;图块插入点替换
  151.             (entmod edata0)  
  152.                         (entmod edata1)  
  153.       
  154.       ; (entupd ename0)   ;;;更新一个对象的屏幕景像,当聚合线或图块修改后,复合对象不会立即更新.
  155.        ;(entupd ename1)   
  156.        ;(entupd ename2)
  157.            )
  158.                 (progn
  159.                         (setq pa ipt0)
  160.                         (setq ang 0 )
  161.                         (setq ang2 ang)
  162.                         (setq tc (polar pa (* pi 0.5) (* h 1.5)))
  163.                   (setq edata0 (subst (cons 10 ipt0) (assoc 10 edata0) edata0))  ;图块插入点替换
  164.                         (setq edata0 (subst (cons 50 ang) (assoc 50 edata0) edata0))  ;图块插入点替换
  165.                         (setq edata1 (subst (cons 10 tc) (assoc 10 edata1) edata1))  ;图块插入点替换
  166.                         (setq edata1 (subst (cons 11 tc) (assoc 11 edata1) edata1))  ;图块插入点替换
  167.                         (setq edata1 (subst (cons 50 ang2) (assoc 50 edata1) edata1))
  168.                         (entmod edata0)  
  169.                         (entmod edata1)  
  170.                 )       
  171.                        
  172.         )        ;if
  173. )

  174. (defun do_keybd()  ;很关键的输入
  175.         (princ"\n 0-空/1-0.2/2-0.4/3-0.8/4-1.6/5-3.2/6-6.3/7-12.5/8-0.1/9自定义")
  176.           (setq pnum (cadr code))       
  177.           (if (or (<= 48 pnum 57) (= pnum 83) (= pnum 115))
  178.                 (setq pstr1 (chr pnum))  ;转化为字符串                       
  179.                 )         
  180.           (cond
  181.                       ((= pstr1 "0") (setq ccd_t ""))
  182.                       ((= pstr1 "1") (setq ccd_t  "0.2"))
  183.                       ((= pstr1 "2") (setq ccd_t  "0.4"))
  184.                       ((= pstr1 "3") (setq ccd_t  "0.8"))
  185.                       ((= pstr1 "4") (setq ccd_t  "1.6"))
  186.                       ((= pstr1 "5") (setq ccd_t  "3.2"))
  187.                       ((= pstr1 "6") (setq ccd_t  "6.3"))
  188.                       ((= pstr1 "7") (setq ccd_t  "12.5"))
  189.                       ((= pstr1 "8") (setq ccd_t  "0.1"))
  190.                             ((= pstr1 "9") (set_ccd_t))
  191.                              (( or (= pstr1 "s") (= pstr1 "S"))
  192.                                                  (progn
  193.                                                          (entdel ename0 )
  194.                      (entdel ename1)   ;删除对象.
  195.                                                          (set_ccd)
  196.                                        (repeat  99
  197.                                                          (initialize_rough)
  198.                                                          (roughdraw)
  199.                                                          (move_rough)
  200.                                                          )
  201.                                                  )
  202.                                          )
  203.                       (t         (setq ccd_t  "3.2")  )
  204.           )
  205.        
  206.         (setq edata1 (subst (cons 1 ccd_t ) (assoc 1 edata1) edata1))
  207.         (entmod edata1)          
  208.         ;(entupd ename)
  209. )

  210. (defun set_ccd_t()
  211.            (setq ccd_2 (strcat "\n新值<"ccd_t">:"))
  212.            (setq ccd_tmp (getstring ccd_2 ))
  213.            (if (= ccd_tmp nil) (setq ccd_tmp ""))
  214.     (setq ccd_t ccd_tmp)
  215. )
  216.        
  217.        
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-28 09:57 , Processed in 0.175144 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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