明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3637|回复: 17

[源码] 经常画圆孔和长圆孔的可以试试这个

[复制链接]
发表于 2021-7-11 22:37:11 | 显示全部楼层 |阅读模式
之前圆孔和长圆孔的插件都单独做过 但是没完全用VLISP试过,这次想着把两个命令合并一起 名称为KK(开孔),以来自己方便,二来分享给大家,喜欢的拿走,以下是源代码:


(defun c:kk (/           AcadObject       AcadDocument
         mSpace    Utility     currLinetype     sc    LinetypeSel
         found     layerSel     layerObj  kwordlist returnstring
         pt           d     l       circle    pt1
         pt2       pt3     pt4       pta         ptb
         ptc       ptd     pte       ptf         ptg
         pth       line1     line2       line3     line4
         pth       PolyLine
        )
  (VL-LOAD-COM)
  (setq    AcadObject   (vlax-get-acad-object)
    AcadDocument (vla-get-ActiveDocument AcadObject)
    mSpace         (vla-get-ModelSpace AcadDocument)
    Utility         (vla-get-Utility AcadDocument)
  )

  (setq layerSel (vla-get-Layers AcadDocument))
  (setq layerObj (vla-add layerSel "Hole"))
  (vla-put-Color layerObj "4")

  (setq currLinetype (vla-get-ActiveLinetype AcadDocument))
  (setq found :vlax-false)
  (setq LinetypeSel (vla-get-Linetypes AcadDocument))
  (VLAX-FOR entry LinetypeSel
    (if    (= (vla-get-Name entry) "CENTER2")
      (setq found :vlax-true)
    )
  )
  (if (= found :vlax-false)
    (vla-load LinetypeSel "CENTER2" "acad.lin")
  )
  (vla-put-ActiveLinetype AcadDocument currLinetype)
  (setq sc 0.4)

  (setq kwordlist "LongCircle Circle")
  (vla-InitializeUserInput Utility 0 kwordlist)
  (setq    returnstring
     (vla-getKeyword Utility " 长圆孔[L] 圆孔[C] <圆孔>")
  )
  (if (/= returnstring "LongCircle")
    (progn
      (if (= record nil)
    (setq record 4.5)
      )
      (princ (strcat "\n孔径大小<" (rtos record 2 2) ">: "))
      (setq d (getreal))
      (if (= d nil)
    (setq d record)
      )
      (setq record d)

      (setq pt (getpoint "\n请输入插入点:"))
      (setq circle (vla-AddCircle mSpace (vlax-3D-point pt) (/ d 2)))
      (vla-put-layer circle "Hole")
      (setq pt1 (list (- (car pt) d) (cadr pt) 0))
      (setq pt2 (list (+ (car pt) d) (cadr pt) 0))
      (setq pt3 (list (car pt) (+ (cadr pt) d) 0))
      (setq pt4 (list (car pt) (- (cadr pt) d) 0))
      (setq line1
          (vla-addline mSpace (vlax-3D-point pt1) (vlax-3D-point pt2))
        line2
          (vla-addline mSpace (vlax-3D-point pt3) (vlax-3D-point pt4))
      )
      (vla-put-layer line1 "Hole")
      (vla-put-color line1 "1")
      (vla-put-Linetype line1 "CENTER2")
      (vla-put-LinetypeScale line1 (* sc d))

      (vla-put-layer line2 "Hole")
      (vla-put-color line2 "1")
      (vla-put-Linetype line2 "CENTER2")
      (vla-put-LinetypeScale line2 (* sc d))

    )
    (progn
      (if (= record2 nil)
    (setq record2 13)
      )
      (princ (strcat "\n孔径大小<" (rtos record2 2 2) ">: "))
      (setq d (getreal))
      (if (= d nil)
    (setq d record2)
      )
      (setq record2 d)
      (if (= record3 nil)
    (setq record3 45)
      )
      (princ (strcat "\n长圆孔的长度<" (rtos record3 2 2) ">: "))
      (setq l (getreal))
      (if (= l nil)
    (setq l record3)
      )
      (setq record3 l)
      (setq pt (getpoint "\n请输入插入点:"))
      (setq
    pta (list (- (car pt) (/ (- l d) 2)) (+ (cadr pt) (/ d 2)) 0)
      )
      (setq
    ptb (list (+ (car pt) (/ (- l d) 2)) (+ (cadr pt) (/ d 2)) 0)
      )
      (setq
    ptc (list (+ (car pt) (/ (- l d) 2)) (- (cadr pt) (/ d 2)) 0)
      )
      (setq
    ptd (list (- (car pt) (/ (- l d) 2)) (- (cadr pt) (/ d 2)) 0)
      )

      (setq pte (list (- (car pt) (/ l 2) (/ d 2)) (cadr pt) 0))
      (setq ptf (list (+ (car pt) (/ l 2) (/ d 2)) (cadr pt) 0))
      (setq ptg (list (car pt) (+ (cadr pt) d) 0))
      (setq pth (list (car pt) (- (cadr pt) d) 0))

      (setq line3
          (vla-addline mSpace (vlax-3D-point pte) (vlax-3D-point ptf))
        line4
          (vla-addline mSpace (vlax-3D-point ptg) (vlax-3D-point pth))
      )

      (vla-put-layer line3 "Hole")
      (vla-put-color line3 "1")
      (vla-put-Linetype line3 "CENTER2")
      (vla-put-LinetypeScale line3 (* sc d))

      (vla-put-layer line4 "Hole")
      (vla-put-color line4 "1")
      (vla-put-Linetype line4 "CENTER2")
      (vla-put-LinetypeScale line4 (* sc d))

      (setq ptns nil)
      (setq ptns (vlax-make-safearray vlax-vbDouble '(0 . 14)))
      (vlax-safearray-fill ptns (append pta ptb ptc ptd pta))
      (setq PolyLine (vla-AddPolyline mSpace ptns))
      (vla-put-layer PolyLine "Hole")
      (vla-SetBulge PolyLine 1 -1)
      (vla-SetBulge PolyLine 3 -1)
    )
  )
  (princ)
)



本帖子中包含更多资源

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

x

评分

参与人数 4明经币 +4 收起 理由
菜鸟初来乍到 + 1
lee50310 + 1 很给力!
tigcat + 1 很给力!
USER2128 + 1 赞一个!

查看全部评分

发表于 2021-7-14 00:31:51 | 显示全部楼层
WWYYBB1015 发表于 2021-7-13 00:00
动态块多了图纸会卡,还要移动视图复制过来,不太方便,我编写的这个,缺点是生成的线都是散的,只是都在 ...

其实就差PE那一下就成整体了,小问题,有需要的自己改改就成了
 楼主| 发表于 2021-7-13 00:00:57 | 显示全部楼层
e2002 发表于 2021-7-12 16:29
动态块应该是个更好的方法

动态块多了图纸会卡,还要移动视图复制过来,不太方便,我编写的这个,缺点是生成的线都是散的,只是都在一个图层里,没有块的整体性好。
发表于 2021-7-12 08:40:16 | 显示全部楼层
非常实用,感谢楼主的热心分享!
发表于 2021-7-12 09:14:24 | 显示全部楼层
谢谢楼主分享。
发表于 2021-7-12 14:38:50 | 显示全部楼层
已下载,多谢
发表于 2021-7-12 16:29:54 | 显示全部楼层
动态块应该是个更好的方法
发表于 2021-7-12 16:49:10 | 显示全部楼层
本帖最后由 jdws213 于 2021-7-12 16:50 编辑

谢谢楼主的好资源!
发表于 2021-7-12 18:31:48 | 显示全部楼层
谢谢分享,存起来备用,谢过啦
发表于 2021-7-12 19:21:20 | 显示全部楼层
谢谢分享源码
发表于 2021-7-12 20:04:11 | 显示全部楼层
谢谢分享好程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 13:09 , Processed in 0.176946 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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