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也有类似情况
页: 1 2 [3] 4
查看完整版本: [活动结束]LISP知识问答第2期--基础篇2-(难度指数:★)