明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: cabinsummer

[【风之影】] [新手源码指导]建库程序,以轴承为例

  [复制链接]
 楼主| 发表于 2012-5-3 13:34 来自手机 | 显示全部楼层
本帖最后由 cabinsummer 于 2012-5-3 20:42 编辑
snddd2000 发表于 2012-5-2 14:40
更新内容
添加简单的轴承绘图部分(不带剖面线和圆角)替换原来的一个圆。
增加判断块名是否存在,如存在 ...


checkblockname函数复杂了
直接用(tblsearch "BLOCK" blockname)即可判断是否有块blockname,有则返回一个表,无则返回nil

点评

谢谢指教,你的对话框驱动程序我还没能理解懂,所以不敢用。  发表于 2012-5-4 06:45
发表于 2012-5-3 16:29 | 显示全部楼层
好的,谢谢,学习学习
发表于 2012-5-4 19:47 | 显示全部楼层
cabinsummer 发表于 2012-4-27 20:51
程序不完整,一上手就是动态,对初学者有点难度,而且没有做出效果。
先给你一个对话框驱动的通用函数 ...

是不是少了一个初始化函数(initialize)
 楼主| 发表于 2012-5-4 20:46 | 显示全部楼层
cabinsummer 发表于 2012-4-27 20:51
程序不完整,一上手就是动态,对初学者有点难度,而且没有做出效果。
先给你一个对话框驱动的通用函数 ...

函数名可以当变量调用,本身函数就是表,表的第一个元素就是运算符,这是LISP的优点
 楼主| 发表于 2012-5-5 07:06 | 显示全部楼层
本帖最后由 cabinsummer 于 2012-5-7 22:31 编辑

数据文本test.txt结构
  1. Index para1 para2 para3
  2. A 1 2 3
  3. B 10 20 30
  4. C 100 200 300
  5. D 1000 2000 3000
复制代码

用以下程序读取参数
  1. (defun get_para (filename id / fn para val)
  2.   (setq fn (open (findfile filename) "r"))                                    ;;;打开数据文件
  3.   (setq para (read (strcat "(" (read-line fn) ")")))                          ;;;读第一行
  4.   (while                                                                      ;;;读到索引为id的行
  5.     (and (setq val (read-line fn))(not (eq id (car (setq val (read (strcat "(" val ")")))))))
  6.     (setq val nil)
  7.   )
  8.   (close fn)                                                                  ;;;关闭数据文件
  9.   (if val (foreach x (setq mtr (mapcar 'cons para val))(set (car x) (cdr x))));;;参数赋值
  10. )

可以得到index为某个值时,各值存在变量para1 para2 para3中。
由于以表为参数,所以可以扩展任意数量的参数,也不在乎参数顺序。
程序运行完毕后,清理无用的自定义变量
  1. (foreach x mtr (set (car x) nil))
  2. (setq mtr nil)

示例:
  1. (get_para "test.txt" 'A)          ;;;得到INDEX=A; PARA1=1; PARA2=2; PARA3=3
  2. (foreach x mtr (set (car x) nil)) ;;;清空
  3. (get_para "test.txt" 'B)          ;;;得到INDEX=B; PARA1=10; PARA2=20; PARA3=30
  4. (foreach x mtr (set (car x) nil)) ;;;清空
  5. (get_para "test.txt" 'C)          ;;;得到INDEX=C; PARA1=100; PARA2=200; PARA3=300
  6. (foreach x mtr (set (car x) nil)) ;;;清空
  7. (get_para "test.txt" 'D)          ;;;得到INDEX=D; PARA1=1000; PARA2=2000; PARA3=3000
  8. (foreach x mtr (set (car x) nil)) ;;;清空
  9. (get_para "test.txt" 'E)          ;;;得到INDEX=nil; PARA1=nil; PARA2=nil; PARA3=nil
 楼主| 发表于 2012-5-9 08:35 来自手机 | 显示全部楼层
没人关注继续了
发表于 2012-8-28 14:14 | 显示全部楼层
学习,差距还是很大的啊。
发表于 2012-10-29 19:11 | 显示全部楼层
很好,感谢分享
发表于 2012-12-29 12:38 | 显示全部楼层
来看看最新进展
发表于 2013-3-13 23:54 | 显示全部楼层
关注继续了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 03:08 , Processed in 0.186408 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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