明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 露水2

[源码] [活动结束]LISP知识问答第2期--基础篇2-(难度指数:★)

  [复制链接]
发表于 2011-1-4 14:35 | 显示全部楼层

10.数字字符或者实数整数四舍五入返回字符串
  格式:(4-5 a n)
  a:为数字字符 "4.2" 实数 5.6 整数7
  n:为保留的小数个数
  比如:(4-5 "4.2" 3)
     返回"4.200"

  1. (defun 4-5 (a n / Num dimzin)
  2.   (setq dimzin (getvar "dimzin"))
  3.   (setvar "dimzin" 0)
  4.   (if (= 'STR (type a))
  5.     (setq Num (rtos (atof a) 2 n))
  6.     (progn
  7.       (setq Num (rtos a 2 n))
  8.       )
  9.     )
  10.   (setvar "dimzin" dimzin)
  11.   Num
  12.   )

评分

参与人数 1金钱 +5 收起 理由
露水2 + 5

查看全部评分

发表于 2011-1-4 18:17 | 显示全部楼层
本帖最后由 redcat 于 2011-1-15 16:09 编辑

回复 露水2 的帖子
  1. ;;计算耗时
  2. (defun c:te(/ t0 t1)
  3. (setq t0(getvar "tdusrtimer"))
  4. ;;注意:为检测被测试程序的真实效率如有选择项,请提到(setq t0 (getvar "tdusrtimer"))前面写出(如:ssget,gereal,getstring等等)
  5. ;;被测试程序段开始




  6. ;;被测试程序段结束
  7. (setq t1(* 86400 (- (getvar "tdusrtimer") t0)))
  8. (princ(strcat "\n程序共计耗时:" (vl-princ-to-string t1)"(秒)"))
  9. (princ)
  10. )
发表于 2011-1-4 18:58 | 显示全部楼层
本帖最后由 redcat 于 2011-1-4 19:38 编辑

回复 caoyin 的帖子

建议还是不要从ssget转换为vlax-ename->vla-object对象
效率要比不转换低20~30倍
te1为未转换耗时;te2为转换耗时


本帖子中包含更多资源

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

x

评分

参与人数 1金钱 +5 收起 理由
露水2 + 5

查看全部评分

 楼主| 发表于 2011-1-4 20:36 | 显示全部楼层
明天答题到期
发表于 2011-1-4 20:54 | 显示全部楼层
5.返回指定图元后的所有图元组成的表
  格式:(EntNextAll ent)
 ent:指定的标志图元
  返回:图元之后生成的所有图元组成的表.
 特别:当ent为nil时返回图中所有的图元组成的表

  1. (defun EntNextAll (ent / ss)
  2.   (if (not ent)
  3.     (setq ss (ssadd (setq ent (entnext))))
  4.   (setq ss (ssadd))
  5.     )
  6.   (while (setq ent (entnext ent))
  7.     (ssadd ent ss)
  8.     )
  9.   (if (= 0 (sslength ss))
  10.     nil
  11.     ss
  12.     )
  13.   )

评分

参与人数 2明经币 +2 金钱 +35 收起 理由
caoyin + 2 + 30 谢谢参与
露水2 + 5

查看全部评分

发表于 2011-1-4 21:20 | 显示全部楼层
本帖最后由 Lisper 于 2011-1-4 21:54 编辑

8.表内公约数
  格式:(listgcd lst)
  lst:表
  比如:(listgcd '(2 4 6 8))
        返回2

  1. (defun listgcd (lst / a lst1)
  2.   
  3.   (while (> (length lst) 2)
  4. (setq a (gcd (car lst) (cadr lst)))
  5.     (setq lst (cons a(cddr lst)))
  6.     )
  7.   (if (> (length lst) 1)
  8.   (eval (cons 'gcd lst))
  9.     (car lst)
  10.     )
  11. )
  12. )
发表于 2011-1-4 21:28 | 显示全部楼层

3.设置图元的一个组码值
  格式:(setdxf ent vallst)
  ent:图元
 vallst:可以是单表或复表,可以是表也可以是点对组成的表

  1. (defun setdxf (ent vallst  / enl a b)
  2.   (setq enl (entget ent))
  3.   (foreach a vallst
  4.     (if (setq b (assoc (car a) enl))
  5.       (setq enl (subst a b enl))
  6.       (setq enl (append enl (list a)))
  7.       )
  8.     )
  9.   (entmod enl)
  10.   )
 楼主| 发表于 2011-1-4 21:33 | 显示全部楼层
;两个数字公约数(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)))
  )
    )

)
 楼主| 发表于 2011-1-4 21:52 | 显示全部楼层
    (LISTGCD LST)......1281 / 1.41 <最快>
    (LISTGCD1 LST).....1812 / 1.00 <最慢>
发表于 2011-1-5 22:37 | 显示全部楼层
本帖最后由 狂刀lxx 于 2011-1-5 23:10 编辑

扫了一眼,提一个。
一般“5.返回指定图元后的所有图元组成的表”,如果用entnext的话
要把块属性,polyline(不是lwpolyline)的后续实体剔除掉。因为那些是历史遗留问题的“尾巴”,不具有通常意义上独立实体的操作性(容易在下一步处理时候出错)。 好像,mesh也有类似情况

评分

参与人数 1明经币 +3 金钱 +30 收起 理由
caoyin + 3 + 30 谢谢参与

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-17 16:58 , Processed in 0.218371 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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