明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 680|回复: 1

[提问] 求助完善螺丝插件

[复制链接]
发表于 2018-9-30 10:51:20 | 显示全部楼层 |阅读模式
本帖最后由 炸子鸡 于 2018-9-30 10:55 编辑

求大神修改,以下是论坛大神发的螺丝插件,根据圆直径生成块,但如果同一尺寸的螺丝孔有实线和虚线同时在就区分不了,希望有大神能完善一下,实线和虚线的螺丝生成不同名字块。

又或者简化一下,只标中心线打上文字M8、M10之类。

附上测试用文件
========================================
(defun c:sww()
  ;----系统变量备份----
  (setvar "cmdecho" 0);_关闭命令提示
  (command "undo" "be")
  (setq osmode_bak (getvar "osmode"));_记录捕捉
  (setvar "osmode" 0);_关闭捕捉
  (setq clayer_bak (getvar "clayer"));_记录当前图层
  (setq cecolor_bak (getvar "cecolor"));_记录当前颜色
  (setq celtype_bak (getvar "celtype"));_记录当前线型
  (setq textstyle_bak (getvar "textstyle"));_记录当前文字样式
  (setq chksty (tblsearch "style" "TXT"))
  (if (= chksty nil)
    (entmake (list '(0 . "STYLE") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbTextStyleTableRecord") (cons 2 "TXT")
       '(70 . 0) (cons 40 1) (cons 41 1) '(3 . "txt.shx") '(4 . "gbcbig.shx")
    )
  )
    )
  (setq chklty (tblsearch "LTYPE" "CENTER"))
  (if (= chklty nil)
    (entmake (list '(0 . "LTYPE") '(100 . "AcDbSymbolTableRecord")  '(100 . "AcDbLinetypeTableRecord")
       (cons 2 "CENTER")  '(3 . "Center ____ _ ____ _ ____ _ ____ _ ____ _ ____")
       '(70 . 0)  '(73 . 2) '(40 . 15.0) '(49 . 10.0)  '(74 . 0) '(49 . -5.0) '(74 . 0)
       )
       )
    )
  (setq ss (ssget '((0 . "CIRCLE")))
       i  0)
  (repeat (sslength ss)
   (setq ename (ssname ss i)
         dat (entget ename)
         pt (usdxf 10 dat)
         r (dxf 40 dat)
   cel (dxf 6 dat)
   D (* R 2)
   )
    (if (or (= cel "DASHED") (= cel "HIDDEN"))
      (setq cel "HIDDEN")
      (setq cel "Continuous")
      )
    (cond ((= d  2.5)
     (setq text "M3")
     (setq xk 0.06)
     (setq mr 1.5)
     (makent)
     )
    ((= d 3.3)
     (setq text "M4")
     (setq xk 0.08)
     (setq mr 2)
     (makent)
    )
    ((= d 4.2)
     (setq text "M5")
     (setq xk 0.1)
     (setq mr 2.5)
     (makent)
     )
    ((= d 5)
     (setq text "M6")
     (setq xk 0.12)
     (setq mr 3)
     (makent)
     )
    ((= d 6.8)
     (setq text "M8")
     (setq xk 0.16)
     (setq mr 4)
     (makent)
     )
    ((= d 8.5)
     (setq text "M10")
     (setq xk 0.2)
     (setq mr 5)
     (makent)
     )
    ((= d 10.5)
     (setq text "M12")
     (setq xk 0.24)
     (setq mr 6)
     (makent)
     )
    ((= d 12)
     (setq text "M14")
     (setq xk 0.28)
     (setq mr 7)
     (makent)
     )
    ((= d 14)
     (setq text "M16")
     (setq xk 0.32)
     (setq mr 8)
     (makent)
     )
    ((= d 15.5)
     (setq text "M18")
     (setq xk 0.36)
     (setq mr 9)
     (makent)
     )
    ((= d 17.5)
     (setq text "M20")
     (setq xk 0.4)
     (setq mr 10)
     (makent)
     )
    )
    (setq i (1+ i))
   )
  ;----系统变量还原----
  (setvar "osmode" osmode_bak);_还原捕捉
  (setvar "clayer" clayer_bak);_还原图层
  (setvar "cecolor" cecolor_bak);_还原颜色
  (setvar "celtype" celtype_bak);_还原线型
  (setvar "textstyle" textstyle_bak);_还原文字样式
  (command "undo" "e")
  (setvar "cmdecho" 1);_打开命令提示
  (princ);_关闭程序返回值
  )

(defun makent ()
  ;;;计算点
  (setq dist (* mr 1.1))
  (setq texth (* mr 0.4))
  (setq pt1 (polar pt 0 dist))
  (setq pt2 (polar pt (* PI 0.5) dist))
  (setq pt3 (polar pt pi dist))
  (setq pt4 (polar pt (* 1.5 pi) dist))
  (setq tept1 (polar pt pi (* mr 2 0.17)))
  (setq textpt (polar tept1 (* 1.5 pi) (* mr 2 0.25)))

  ;生成圆
  (entmake (list (cons 0 "CIRCLE")
     (cons 67 0)
     (CONS 62 33)
     (cons 8 "screw")
     (cons 6  cel)
     (cons 48 xk)
     (cons 10 pt)
     (cons 40 r)
     )
     )
  (setq en1 (entlast))
  ;生成中心线
  (entmake (list (cons 0 "LINE")
     (cons 8 "screw")
     (CONS 62 1)
     (cons 6  "CENTER")
     (cons 48 xk)
     (cons 10 pt1)
     (cons 11 pt3)
      )
      )
  (setq en2 (entlast))
  ;生成中心线
  (entmake (list (cons 0 "LINE")
     (cons 8 "screw")
     (CONS 62 1)
     (cons 6  "CENTER")
     (cons 48 xk)
     (cons 10 pt2)
     (cons 11 pt4)
      )
      )
  (setq en3 (entlast))

  ;;;生成文字
  (entmake (list (cons 0 "TEXT")
     (cons 8 "screw")
     (CONS 62 6)
     (cons 10 textpt)
     (cons 40 texth)
     (cons 1 text)
     (cons 7 "TXT")
     (cons 41 1)
     (cons 51 0.0)
     (cons 71 0)
     (cons 72 0)
     (cons 73 0)
     (list 210 0.0 0.0 1.0)
      )
      )
  (setq en5 (entlast))


;13、entmake生成普通块
;http://bbs.mjtd.com/forum.php?mod=viewthread&tid=92482
;by langjs
(defun emkblk (ss pt name / i)
  (setvar "cmdecho" 0)
  (entmake (list '(0 . "block") (cons 2 name) '(70 . 0) (cons 10 pt)))
  (repeat (setq i (sslength ss))    (entmake (cdr (entget (ssname ss (setq i (1- i))))))  )
  (entmake '((0 . "ENDBLK")))
  (command "_.erase" ss "")
  (entmake (list '(0 . "INSERT") (cons 8 "screw") (cons 2 name) (cons 10 pt)))
  (setvar "cmdecho" 1)
)

(defun dxf (m dat) (cdr (assoc m dat)))
(defun dxfucs (m dat)  (trans (cdr (assoc m dat)) 0 1))
(defun usdxf (n entt) (cdr(assoc n entt)))

本帖子中包含更多资源

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

x
发表于 2018-9-30 13:30:50 | 显示全部楼层
程序好像有问题,运行不了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 05:09 , Processed in 0.155529 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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