明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4135|回复: 20

建议大家贴出自己的通用子程序.

  [复制链接]
发表于 2004-10-30 13:14:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2004-10-30 16:09:53 编辑

建议大家贴出自己的通用子程序,节余宝贵的编程时间. 1.务必简洁,通用,经典;2.说明用法案例;3.必要时注明其缺陷;4.请斑竹给予评指. (抛砖引玉)以下这个自定义函数可以判断m是否能被n整除 (defun imod(m n / tep)
(= (setq tep(/ (* 1.0 m) n)) (fix tep))
) 例imod 20 3)返回nil (imod 20 4)返回T.

点评

(defun imod (m n) (= (rem m n) 0))  发表于 2012-11-22 07:28
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2004-10-30 21:23:00 | 显示全部楼层
将字符串以表的形式返回 (defun istr(tt / nn k str_k)
(setq nn (strlen tt) k 1)
(while (<= k nn)
(if (> (ascii (substr tt k 2)) 127)
(setq str_k (append str_k (list (substr tt k 2))) k (+ k 2))
(setq str_k (append str_k (list (substr tt k 1))) k (+ k 1))
)
)str_k) 例: (istr "明经CAD社区")返回("明" "经" "C" "A" "D" "社" "区")
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2004-10-30 13:25:00 | 显示全部楼层
本帖最后由 作者 于 2004-10-30 16:06:05 编辑

返回spath路径下唯一的文件名 (defun fonly(spath / i st)
(setq i 1)
(while (progn (setq st (itoa i) i (1+ i))
(if (< i 100) (setq st (strcat "0" st)))
(if (< i 10 ) (setq st (strcat "0" st)))
(findfile (setq st (strcat spath st ".txt")))
)) st ) 例: (fonly "d:/") 返回 "d:/001.txt" , 如果"d:/001.txt"已存在则返回"d:/002.txt" . 注意:如果该路径下文件数超过999个,可能出现非正常结果.
 楼主| 发表于 2004-10-30 13:32:00 | 显示全部楼层
以表的形式返回CAD的搜索路径 (defun ipath(/ ss k kk sstl)
(setq ss (getenv "ACAD") k 1 kk 1)
(while (<= (progn (if (= (substr ss k 1) ";")
(progn (setq st (substr ss kk (- k kk))
kk (+ k 1) sstl (append sstl (list st)))))
(setq k (1+ k))) (strlen ss))) sstl
) 例如ipath) 返回: ("C:\\Program Files\\AutoCAD R14\\support" "C:\\Program
Files\\AutoCAD R14\\fonts" "C:\\Program Files\\AutoCAD R14\\help")
发表于 2004-10-30 14:17:00 | 显示全部楼层
不错是个好的建议,强烈要求置顶 ;;;功能:取得文件内容
;;;By-Spring
;;;2004/10/26
(defun GET_FILE_GLA (fi / fil pe fel gla_list)
(setq gla_list nil)
(if (findfile fi)
(progn
(setq fil (findfile fi))
(setq pe (open fil "r"))
(while (setq fel (read-line pe))
(setq gla_list (cons fel gla_list))
)
(close pe)
(setq gla_list (reverse gla_list))
)
)
gla_list
)
发表于 2004-10-30 14:23:00 | 显示全部楼层
;;;功能:取得图元的坐标资料
;;;By-Spring
;;;2004/08/25
(defun GET-MAXMIN (ss / n point_list en minpoint maxpoint p1 p2 center)
(if ss
(progn
(setq n 0) ;设置计数器
(setq point_list nil)
(while (> (sslength ss) n) ;循环选中的物体
(setq en (vlax-ename->vla-object (ssname ss n)))
;取得图元名称(VLA 对象)
(vla-getboundingbox en 'minpoint 'maxpoint) ;取得最小点和最大点
(setq point_list
(append point_list
(mapcar 'vlax-safearray->list
(list minpoint maxpoint)
)
)
)
(setq n (1+ n))
)
;;结束循环
(setq p1 (list (apply 'min (mapcar 'car point_list))
(apply 'min (mapcar 'cadr point_list))
)
) ;取得最小坐标
(setq p2 (list (apply 'max (mapcar 'car point_list))
(apply 'max (mapcar 'cadr point_list))
)
) ;取得最大坐标
(setq center (list (/ (+ (car p1) (car p2)) 2)
(/ (+ (cadr p1) (cadr p2)) 2)
)
) ;取得中心点
;;; (command "_.RECTANGLE" p1 p2)
)
)
)
;;;_______________________________________________________
;;;调用格式
(defun c:aa (/ ss)
(setq ss (ssget))
(GET-MAXMIN ss)
)
发表于 2004-10-30 16:53:00 | 显示全部楼层
;;;图层输入格式化
;;;Examplemkla "层名" 颜色号)
(Defun MKLA (a b)
(If (= (Tblsearch "layer" a) nil)
(Command "layer" "m" a "c" b a "")
(Command "layer" "t" a "s" a "c" b a "")
)
)
发表于 2004-10-30 19:06:00 | 显示全部楼层
以下这个自定义函数可以判断m是否能被n整除 (defun imod(m n / tep)
(= 0. (rem m n))
) 例imod 20 3)返回nil (imod 20 4)返回T.
发表于 2004-10-30 19:31:00 | 显示全部楼层
哈哈,那还要这函数啥用?直接(= (rem m n) 0)就行。记得以前很多人用的那个DXF函数,现在倒没影了。
 楼主| 发表于 2004-10-30 21:17:00 | 显示全部楼层
哈哈,看来那是个失败的函数,不过如果不贴出来,我还不知道是多此一举呢.



那个DXF函数是什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-30 10:32 , Processed in 0.197212 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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