明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 665|回复: 5

[讨论] 画长圆孔,需要改进

[复制链接]
发表于 2021-10-30 12:49 | 显示全部楼层 |阅读模式
5明经币
这是一个画长圆孔的LSP,非常好用,但需要改进一下,请大大师给优化一下。 要求:1、去掉中心线。
           2、中需要画长圆孔一个功能就可,把画圆孔的代码去掉。



(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)
)


最佳答案

发表于 2021-10-30 12:49 | 显示全部楼层
本帖最后由 htlaser 于 2021-10-30 16:06 编辑
xiao88gang 发表于 2021-10-30 15:50
命令: (LOAD "C:/Users/Administrator/Desktop/kk.lsp") Application ERROR:
命令输入时发送的类型无效 ...

命令 KK5

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2021-10-30 14:14 | 显示全部楼层
本帖最后由 htlaser 于 2021-10-30 14:22 编辑

  1. (defun c:kk5 (/ acaddocument acadobject currlinetype d found l layerobj layersel linetypesel mspace polyline pt pta ptb ptc ptd pte ptf ptg pth ptns  sc utility)
  2.   (VL-LOAD-COM)
  3.   (setq        AcadObject   (vlax-get-acad-object)
  4.         AcadDocument (vla-get-ActiveDocument AcadObject)
  5.         mSpace             (vla-get-ModelSpace AcadDocument)
  6.         Utility             (vla-get-Utility AcadDocument)
  7.   )

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

  11.   (setq currLinetype (vla-get-ActiveLinetype AcadDocument))
  12.   (setq found :vlax-false)
  13.   (setq LinetypeSel (vla-get-Linetypes AcadDocument))
  14.   (VLAX-FOR entry LinetypeSel
  15.     (if        (= (vla-get-Name entry) "CENTER2")
  16.       (setq found :vlax-true)
  17.     )
  18.   )
  19.   (if (= found :vlax-false)
  20.     (vla-load LinetypeSel "CENTER2" "acad.lin")
  21.   )
  22.   (vla-put-ActiveLinetype AcadDocument currLinetype)
  23.   (setq sc 0.4)
  24.   (princ "\n绘制画长圆孔 ")  
  25.     (progn
  26.       (if (= record2 nil)
  27.         (setq record2 13)
  28.       )
  29.       (princ (strcat "\n孔径大小<" (rtos record2 2 2) ">: "))
  30.       (setq d (getreal))
  31.       (if (= d nil)
  32.         (setq d record2)
  33.       )
  34.       (setq record2 d)
  35.       (if (= record3 nil)
  36.         (setq record3 45)
  37.       )
  38.       (princ (strcat "\n长圆孔的长度<" (rtos record3 2 2) ">: "))
  39.       (setq l (getreal))
  40.       (if (= l nil)
  41.         (setq l record3)
  42.       )
  43.       (setq record3 l)
  44.       (setq pt (getpoint "\n请输入插入点:"))
  45.       (setq
  46.         pta (list (- (car pt) (/ (- l d) 2)) (+ (cadr pt) (/ d 2)) 0)
  47.       )
  48.       (setq
  49.         ptb (list (+ (car pt) (/ (- l d) 2)) (+ (cadr pt) (/ d 2)) 0)
  50.       )
  51.       (setq
  52.         ptc (list (+ (car pt) (/ (- l d) 2)) (- (cadr pt) (/ d 2)) 0)
  53.       )
  54.       (setq
  55.         ptd (list (- (car pt) (/ (- l d) 2)) (- (cadr pt) (/ d 2)) 0)
  56.       )

  57.       (setq pte (list (- (car pt) (/ l 2) (/ d 2)) (cadr pt) 0))
  58.       (setq ptf (list (+ (car pt) (/ l 2) (/ d 2)) (cadr pt) 0))
  59.       (setq ptg (list (car pt) (+ (cadr pt) d) 0))
  60.       (setq pth (list (car pt) (- (cadr pt) d) 0))
  61.       
  62.       (setq ptns nil)
  63.       (setq ptns (vlax-make-safearray vlax-vbDouble '(0 . 14)))
  64.       (vlax-safearray-fill ptns (append pta ptb ptc ptd pta))
  65.       (setq PolyLine (vla-AddPolyline mSpace ptns))
  66.       (vla-put-layer PolyLine "Hole")
  67.       (vla-SetBulge PolyLine 1 -1)
  68.       (vla-SetBulge PolyLine 3 -1)
  69.     )
  70.   
  71.   (princ)
  72. )



修改一下    有两个是全局变量
回复

使用道具 举报

 楼主| 发表于 2021-10-30 15:50 | 显示全部楼层
htlaser 发表于 2021-10-30 14:14
修改一下    有两个是全局变量

命令: (LOAD "C:/Users/Administrator/Desktop/kk.lsp") Application ERROR:
命令输入时发送的类型无效
Application ERROR: 命令输入时发送的类型无效
输入的字符串有缺陷
回复

使用道具 举报

 楼主| 发表于 2021-10-30 16:21 | 显示全部楼层

完美。谢谢。
回复

使用道具 举报

 楼主| 发表于 2021-10-30 16:26 | 显示全部楼层

怎么付币?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 05:38 , Processed in 0.354760 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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