明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 871|回复: 3

[讨论] 如何修改才可以让这个程式运行得更快?

[复制链接]
发表于 2022-5-12 16:02:40 | 显示全部楼层 |阅读模式
(defun c:obb ( / del en n pt1 ro ss)
  (if(= w nil)(setq w 5))
  (if(= d nil)(setq d 5))
  (setq w1 w
        d1 d)
  (setq w (getdist (strcat"\n长:"(rtos w)">>>>>")))
  (setq d (getdist (strcat"\n宽:"(rtos d)">>>>>")))
(if
  (= w nil)
   (setq w w1)
)
(if
  (= d nil)
   (setq d d1)
)
  (SETQ ro (getreal "\n旋转角度:[0]"))
  (initget "Y y N n")
  (setq del(GETKWORD"\n是否删除圆Y/NY)"))
  (COND ((= del "y")(setq del(strcase del)))
        ((= del "n")(setq del(strcase del)))
        )

  (setq n 0)
  (setq ss (ssget '((0 . "CIRCLE"))))
  (command "chprop"ss "" "c" 1 "")
  (repeat (sslength ss)
    (setq en (ssname ss n))
    (setq en(entget en))
    (setq pt1 (cdr(assoc 10 en)))
    (sub-ob)
    (setq n(1+ n))
  )
  (cond ((= del nil) (command "erase"ss""))
        ((= del "Y") (command "erase"ss""))
        )
)


;;;======================================================
(defun sub-ob ()
  (setvar "osmode" 4543)
  (setvar "osmode" 0)
  (setq pt2 (polar pt1 0 w))
  (setq pt3 (polar pt2 (/ pi 2) d))
  (setq pt4 (polar pt3 pi w))
  (command "pline" pt1 pt2 "a" pt3 "l" pt4 "a" pt1 "")
  (setq aa (entlast))
  (setq pt (INTERs pt1 pt3 pt2 pt4))
  (command "move" aa "" pt pt1 "")
  (if (> ro 0)
    (COMMAND "ROTATE" AA "" PT1 ro)
  )
  (command "chprop"aa "" "c" 2 "")
  (setvar "osmode" 4543)
  (prin1)
)

发表于 2022-5-12 17:10:00 | 显示全部楼层
本帖最后由 llsheng_73 于 2022-5-12 17:18 编辑

用command它快不起来,另外很多步骤实际上都能计算出来

  1. (defun c:bb (/ del n ro ss w1 d1 r ang)
  2.   (setq w1(if(numberp w)w 5)
  3.         d1(if(numberp d)d 5))
  4.   (or(setq w(getdist (strcat"\n长:"(rtos(if(numberp w)w 5))">>>>>")))
  5.      (setq w w1))
  6.   (or(setq d(getdist (strcat"\n宽:"(rtos(if(numberp d)d 5))">>>>>")))
  7.      (setq d d1))
  8.   (setq ro(getreal "\n旋转角度:[0]")
  9.         ro(if ro(/(* ro pi)180)0))
  10.   (initget "Y y N n")
  11.   (setq del(="N"(GETKWORD"\n是否删除圆Y/N[Y])"))
  12.         r(*(sqrt(+(* w w)(* d d)))0.5)
  13.         ang(angle'(0 0)(list w d))
  14.         n 0
  15.         ss(ssget '((0 . "CIRCLE"))))
  16.   (repeat(sslength ss)
  17.     (sub-ob(ssname ss n)r ang ro del)
  18.     (setq n(1+ n)))
  19.   (setvar "osmode" 4543)
  20. )
  21. (defun sub-ob(e r ang ro f / pt)
  22.   (setq pt(cdr(assoc 10(entget e))))
  23.   (entmake(apply'append(cons(mapcar'cons'(0 100 100 62 90 70)(append'("LWPOLYLINE""AcDbEntity""AcDbPolyline"2 4 1)))
  24.                  (mapcar'(lambda(x y)(list(cons 10(polar pt x r))(cons 42 y)))
  25.                         (list(+ pi ang ro)(+ pi pi(- ang)ro)(+ ang ro)(+ pi(- ang)ro))
  26.                         '(0 1 0 1)))))
  27.   (if f(entmod(append(entget e)'((62 . 1))))
  28.     (entdel e))
  29.   )
 楼主| 发表于 2022-5-13 12:41:32 | 显示全部楼层
llsheng_73 发表于 2022-5-12 17:10
用command它快不起来,另外很多步骤实际上都能计算出来

经过大师修改后程式增长了不少性能果然不同凡响,就是我看不明白了

点评

94,大师写得不规范,叠罗汉呢。  发表于 2022-5-13 12:58
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 01:28 , Processed in 0.204321 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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