明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2063|回复: 9

[讨论]怎么样提高各程序执行速度

[复制链接]
发表于 2004-4-4 21:41:00 | 显示全部楼层 |阅读模式
当调用很多CAD命令时,在程序执行时会很慢,并且用UNDO 命令返回操作要很多次,怎么样才能提高其执行速度,并可用 UNDO一次返回,不在UNDO参数的次数中输入数字,我有 一代码如下: (progn
(command "dimaligned" pot1 pot2 "@0,-450")
(if (< (distance pot1 pot2) 500) (command "dimtedit" (entlast) id1))
(command "dimaligned" pot3 pot2 "@0,-450")
(if (< (distance pot2 pot3) 500) (command "dimtedit" (entlast) id2))
(command "dimaligned" pot4 pot5 "@450,0")
(if (< (distance pot4 pot5) 500) (command "dimtedit" (entlast) id3))
(command "dimaligned" pot6 pot5 "@450,0")
(if (< (distance pot5 pot6) 500) (command "dimtedit" (entlast) id4))
) 像这样执行就好慢,有什么办法解决吗?请高手指点
发表于 2004-4-4 21:50:00 | 显示全部楼层
(command "_.undo" "be")


(command "_.line" ...)


...


(command "_.undo" "e")


这样,只需要使用"u"命令就可以一次撤消中间所有的命令了
发表于 2004-4-4 21:50:00 | 显示全部楼层
用(command "undo" "be")开始


        .......................


(command "undo" "e")结束
发表于 2004-4-4 21:52:00 | 显示全部楼层
不好意思刷新慢了点.
 楼主| 发表于 2004-4-4 22:13:00 | 显示全部楼层
多谢了,不过不知道是LISP功能有限不,程序执行起来比较慢啊


像上面类似的程序
发表于 2004-4-5 07:54:00 | 显示全部楼层
要看你的程序的问题,怎么也要把你的程序给出来啊...怎么每次都要求你一样,才有详细的提问资料?
 楼主| 发表于 2004-4-5 09:36:00 | 显示全部楼层
好的,其实我要指的是上面那部分的。 (defun c:dcc ()
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setq os (getvar "osmode"))
(command "_.undo" "be")
;(setq ltsc (getvar "ltscale"))
;(setvar "ltscale" 1)(command "regen")
(setq p11 (getpoint "\n请选择起点:"))
(if (= p11 nil) (exit))
(setq p12 (getcorner p11 "\n请选择另一角点:"))
(setq ss (ssget "c" p11 p12 '((0 . "LWPOLYLINE"))))
(setq num (sslength ss)
NN 0)
(while (< NN num)
(setq nam (ssname ss NN)
ent (entget nam))
(pline_po)
(setq ss1 (ssget "f" (list p-1 p-2) '((0 . "LINE"))))
(SETQ nam1 (ssname ss1 0)
ent1 (entget nam1))
(setq ss2 (ssget "f" (list p-3 p-4) '((0 . "LINE"))))
(SETQ nam2 (ssname ss2 0)
ent2 (entget nam2))
(setq l-1 (cdr (assoc 10 ent1))
l-2 (cdr (assoc 11 ent1))
l-3 (cdr (assoc 10 ent2))
l-4 (cdr (assoc 11 ent2)))
(setq int1 (inters p-1 p-2 l-1 l-2)
int2 (inters p-3 p-4 l-3 l-4))
(setq pot1 (polar p-1 (+ (angle p-1 p-2) (* pi 1.5)) 350)
pot2 (polar int1 (+ (angle p-1 p-2) (* pi 1.5)) 350)
pot3 (polar p-2 (+ (angle p-1 p-2) (* pi 1.5)) 350)
pot4 (polar p-3 (+ (angle p-3 p-4) (* pi 1.5)) 350)
pot5 (polar int2 (+ (angle p-3 p-4) (* pi 1.5)) 350)
pot6 (polar p-4 (+ (angle p-3 p-4) (* pi 1.5)) 350)) (setq id1 (polar (polar (polar pot1 (angle pot1 pot2) (*(distance pot1 pot2) 0.5)) (+ (angle pot1 pot2) (* pi 1.5)) 172.3568) (+ (angle pot1 pot2) pi) 200))
(setq id2 (polar (polar (polar pot3 (angle pot3 pot2) (*(distance pot2 pot3) 0.5)) (+ (angle pot2 pot3) (* pi 1.5)) 172.3568) (+ (angle pot3 pot2) pi) 200))
(setq id3 (polar (polar (polar pot4 (angle pot4 pot5) (*(distance pot4 pot5) 0.5)) (+ (angle pot4 pot5) (* pi 1.5)) 172.3568) (+ (angle pot4 pot5) pi) 200))
(setq id4 (polar (polar (polar pot6 (angle pot6 pot5) (*(distance pot5 pot6) 0.5)) (+ (angle pot5 pot6) (* pi 1.5)) 172.3568) (+ (angle pot6 pot5) pi) 200)) (load "dim_1-100")(dim_1-100) (command "_.dimaligned" pot1 pot2 "@0,-450")
(if (< (distance pot1 pot2) 500) (command "_.dimtedit" (entlast) id1))
(command "_.dimaligned" pot3 pot2 "@0,-450")
(if (< (distance pot2 pot3) 500) (command "_.dimtedit" (entlast) id2))
(command "_.dimaligned" pot4 pot5 "@450,0")
(if (< (distance pot4 pot5) 500) (command "_.dimtedit" (entlast) id3))
(command "_.dimaligned" pot6 pot5 "@450,0")
(if (< (distance pot5 pot6) 500) (command "_.dimtedit" (entlast) id4)) (setq NN (1+ NN))
);while
;(setvar "ltscale" ltsc)(command "regen")
(command "_.undo" "e")
(setvar "osmode" os)
(setvar "cmdecho" 1)
(princ));end defun
;求PLINE上的点
(defun pline_po ()
(load "get_pl_pot")
(setq plpot (get_pl_pot nam)) (setq plpot
(vl-sort plpot
(function (lambda (e1 e2)
(< (cadr e1) (cadr e2)) ) ) ) ;按Y坐标排序(小到大)
);;end setq (SETQ P-1 (NTH 0 plpot) p-2 (NTH 1 plpot));求点(水平) (setq lst1
(vl-sort (list p-1 p-2)
(function (lambda (e1 e2)
(< (car e1) (car e2)) ) ) ) ;按Y坐标排序(小到大)
);;end setq
(setq p-1 (nth 0 lst1) p-2 (nth 1 lst1)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq plpot1
(vl-sort plpot
(function (lambda (e1 e2)
(< (car e1) (car e2)) ) ) ) ;按X坐标排序(大到小)
);;end setq (setq p-3 (nth 2 plpot1) p-4 (nth 3 plpot1));求点(垂直)

(setq lst2
(vl-sort (list p-3 p-4)
(function (lambda (e1 e2)
(< (cadr e1) (cadr e2)) ) ) ) ;按Y坐标排序(小到大)
);;end setq
(setq p-3 (nth 0 lst2) p-4 (nth 1 lst2)) );end defun (defun dim_1-100 ()
(command "style" "arial_narrow" "arial narrow" "" "" "" "" "")
(command "insert" "dimx" "0,0" "" "" "")
(command "erase" (entlast) "") (setq tbl (tblsearch "dimstyle" "1-100"))
(if (= tbl nil)
(command "DIMSTYLE" "s" "1-100")
(command "DIMSTYLE" "r" "1-100")
);end if ;设置标注参数
(setvar "DIMALTD" 4)
(setvar "DIMALTTD" 4)
(setvar "DIMALTTZ" 0)
(setvar "DIMALTU" 8)
(setvar "DIMALTZ" 0)
(setvar "DIMAPOST" "")
(setvar "DIMASZ" 1)
(setvar "DIMAUNIT" 0)
;判断ACAD版本号
(setq acadver (getvar "acadver"))
(if (= acadver "14.0")
(setvar "dimblk" "DIMX")
(setvar "DIMLDRBLK" "DIMX"))
(setvar "DIMBLK1" "DIMX")
(setvar "DIMBLK2" "DIMX")
(setvar "DIMBLK" "DIMX")
(setvar "DIMCEN" 2.5)
(setvar "DIMCLRD" 82)
(setvar "DIMCLRE" 82)
(setvar "DIMCLRT" 2)
(setvar "DIMDEC" 0)
(setvar "DIMDLE" 0)
(setvar "DIMDLI" 0)
(setvar "DIMEXE" 250)
(setvar "DIMEXO" 0)
(setvar "DIMFIT" 5)
(setvar "DIMGAP" 150)
(setvar "DIMJUST" 0)
(setvar "DIMLFAC" 1)
(command "DIMLIM" "Off")
(setvar "DIMPOST" "")
(setvar "DIMRND" 0)
(command "DIMSAH" "On")
(setvar "DIMSCALE" 1)
(command "DIMSD1" "Off")
(command "DIMSD2" "Off")
(command "DIMSE1" "Off")
(command "DIMSE2" "Off")
(command "DIMSHO" "On")
(command "DIMSOXD" "Off")
(setvar "DIMTAD" 1)
(setvar "DIMTDEC" 4)
(setvar "DIMTFAC" 1)
(command "DIMTIH" "Off")
(command "DIMTIX" "On")
(setvar "DIMTM" 0)
(command "DIMTOFL" "On")
(command "DIMTOH" "Off")
(command "DIMTOL" "Off")
(setvar "DIMTOLJ" 1)
(setvar "DIMTP" 0)
(setvar "DIMTSZ" 0)
(setvar "DIMTVP" 0)
(setvar "DIMTXSTY" "ARIAL_NARROW")
(setvar "DIMTXT" 250)
(setvar "DIMTZIN" 0)
(setvar "DIMUNIT" 2)
(command "DIMUPT" "Off")
(setvar "DIMZIN" 0)
) (defun GET_PL_POT (E / ED)
(defun DXF (NO)
(cdr (assoc NO ED))
)
(defun GETLWPL (ED / PL)
(while (setq ED (cdr (member (setq PL10 (assoc 10 ED))
ED
)
)
)
(setq PL (cons (cdr PL10) PL))
)
(reverse PL)
)
(defun GETPL (ED / E PL P10)
(setq E (DXF -1))
(while (setq E (entnext E))
(if (setq P10 (cdr (assoc 10 (entget E))))
(setq PL (cons P10 PL))
)
)
(reverse PL)
)
(setq ED (entget E))
(setq PLTYPE (DXF 0))
(cond
((= "POLYLINE" PLTYPE)
(GETPL ED)
)
((= "LWPOLYLINE" PLTYPE)
(GETLWPL ED)
)
)
)
 楼主| 发表于 2004-4-5 09:39:00 | 显示全部楼层
这个程序比较死板,执行也比较慢


请给点建议。
发表于 2004-4-5 12:11:00 | 显示全部楼层
因为你在循环中使用了大量的过程和命令,如果循环次数过大,当然就慢了,没有办法,要想改进程序,让运行速度增加,只有不断学习,掌握程序设计技巧...这也不是一时能学会的,要慢慢来
发表于 2004-4-5 12:31:00 | 显示全部楼层
本帖最后由 作者 于 2004-4-6 10:03:35 编辑

參考: (if (=pp nil) (progn (setq pp 1) ;设置标注参数
(setvar "DIMALTD" 4)
(setvar "DIMALTTD" 4)
(setvar "DIMALTTZ" 0)
(setvar "DIMALTU" 8)
(setvar "DIMALTZ" 0)
(setvar "DIMAPOST ... 使用變數判斷是否要設定參數,第一次要設定,第二次執行時會跳過
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 15:39 , Processed in 0.208313 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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