Lisper
发表于 2011-1-4 14:35:46
10.数字字符或者实数整数四舍五入返回字符串
格式:(4-5 a n)
a:为数字字符 "4.2" 实数 5.6 整数7
n:为保留的小数个数
比如:(4-5 "4.2" 3)
返回"4.200"
(defun 4-5 (a n / Num dimzin)
(setq dimzin (getvar "dimzin"))
(setvar "dimzin" 0)
(if (= 'STR (type a))
(setq Num (rtos (atof a) 2 n))
(progn
(setq Num (rtos a 2 n))
)
)
(setvar "dimzin" dimzin)
Num
)
redcat
发表于 2011-1-4 18:17:59
本帖最后由 redcat 于 2011-1-15 16:09 编辑
回复 露水2 的帖子;;计算耗时
(defun c:te(/ t0 t1)
(setq t0(getvar "tdusrtimer"))
;;注意:为检测被测试程序的真实效率如有选择项,请提到(setq t0 (getvar "tdusrtimer"))前面写出(如:ssget,gereal,getstring等等)
;;被测试程序段开始
;;被测试程序段结束
(setq t1(* 86400 (- (getvar "tdusrtimer") t0)))
(princ(strcat "\n程序共计耗时:" (vl-princ-to-string t1)"(秒)"))
(princ)
)
redcat
发表于 2011-1-4 18:58:47
本帖最后由 redcat 于 2011-1-4 19:38 编辑
回复 caoyin 的帖子
建议还是不要从ssget转换为vlax-ename->vla-object对象
效率要比不转换低20~30倍
te1为未转换耗时;te2为转换耗时
露水2
发表于 2011-1-4 20:36:57
明天答题到期
Lisper
发表于 2011-1-4 20:54:00
5.返回指定图元后的所有图元组成的表
格式:(EntNextAll ent)
ent:指定的标志图元
返回:图元之后生成的所有图元组成的表.
特别:当ent为nil时返回图中所有的图元组成的表
(defun EntNextAll (ent / ss)
(if (not ent)
(setq ss (ssadd (setq ent (entnext))))
(setq ss (ssadd))
)
(while (setq ent (entnext ent))
(ssadd ent ss)
)
(if (= 0 (sslength ss))
nil
ss
)
)
Lisper
发表于 2011-1-4 21:20:05
本帖最后由 Lisper 于 2011-1-4 21:54 编辑
8.表内公约数
格式:(listgcd lst)
lst:表
比如:(listgcd '(2 4 6 8))
返回2
(defun listgcd (lst / a lst1)
(while (> (length lst) 2)
(setq a (gcd (car lst) (cadr lst)))
(setq lst (cons a(cddr lst)))
)
(if (> (length lst) 1)
(eval (cons 'gcd lst))
(car lst)
)
)
)
Lisper
发表于 2011-1-4 21:28:27
3.设置图元的一个组码值
格式:(setdxf ent vallst)
ent:图元
vallst:可以是单表或复表,可以是表也可以是点对组成的表
(defun setdxf (ent vallst/ enl a b)
(setq enl (entget ent))
(foreach a vallst
(if (setq b (assoc (car a) enl))
(setq enl (subst a b enl))
(setq enl (append enl (list a)))
)
)
(entmod enl)
)
露水2
发表于 2011-1-4 21:33:49
;两个数字公约数(zml84写的)
(defun listgcd2 (a b)
(if (= a b)
a
(listgcd2 (- (max a b) (min a b)) (min a b))
)
)
;表内公约数
(defun listgcd (lst)
(cond ((= (length lst) 2)
(listgcd2 (car lst) (cadr lst))
)
((= (length lst) 1)
(car lst)
)
((> (length lst) 2)
(listgcd (cons(listgcd2 (car lst) (cadr lst)) (cddr lst)))
)
)
)
露水2
发表于 2011-1-4 21:52:02
(LISTGCD LST)......1281 / 1.41 <最快>
(LISTGCD1 LST).....1812 / 1.00 <最慢>
狂刀lxx
发表于 2011-1-5 22:37:48
本帖最后由 狂刀lxx 于 2011-1-5 23:10 编辑
扫了一眼,提一个。
一般“5.返回指定图元后的所有图元组成的表”,如果用entnext的话
要把块属性,polyline(不是lwpolyline)的后续实体剔除掉。因为那些是历史遗留问题的“尾巴”,不具有通常意义上独立实体的操作性(容易在下一步处理时候出错)。 好像,mesh也有类似情况