中国CAD论坛

 找回密码
 注册会员

QQ登录

只需一步,快速开始

凯得学院(CAD8学院)AutoCAD软件下载AutoCAD视频教程等待验证会员请验证邮箱
注册会员指导可以赚钱的网盘CAD习题集AutoCAD技巧
查看: 12|回复: 0
收起左侧

AutoCAD下,实测巷道控制点展点用的Lisp源程序

[复制链接]
发表于 2018-11-8 09:12:40 | 显示全部楼层 |阅读模式 简体中文繁體中文
用QQ等截图工具截图后,点中发贴区直接按Ctrl+V键就可以将截图粘贴到发贴框.

欢迎加入,注册成为会员,享用更多功能,完全免费。

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

x
;此程序只限于读取以逗号(,)为分隔符的文件,各列数据的顺序依次为:点号,数学坐标X值,数学坐标Y值,Z值。

  1. (defun c:csv ( / f savecmdecho n) ;程序名为csv。
  2. (prompt "\n此程序只限于读取以逗号(,)为分隔符的文件,各列数据的顺序依次为:点号,数学坐标X值,数学坐标Y值,Z值。")
  3. (setq f (getstring "\n请输入逗号分隔符文件的全称及其路径:"));设置变量f作为逗号分隔符文件全称及其路径的字符串值。
  4. (prompt "\n正在读取文件中的数据...")
  5. (princ)
  6. (setq f (open f "r"));用open函数来打开文件,并把打开的文件指针传递给变量f。
  7. (setq savecmdecho (getvar "cmdecho"))
  8. (setq saveosmode (getvar "osmode"))
  9. (setq savesnapmode (getvar "snapmode"))
  10. (setvar "cmdecho" 0)
  11. (setvar "osmode" 0)
  12. (setvar "snapmode" 0)
  13. (setq n 0)
  14. (while;循环读取行数据并画点标注的函数。
  15. (setq s (read-line f));此行用来判断是否读完了文件,如果是则返回nil。
  16. (setq s (DeleteBlank s));调用DeleteBlank函数,去掉变量s前面的空格。
  17. (while
  18. (= s "");如果变量s不是空字符串,则跳出此循环,否则读取下一行数据。
  19. (setq s (read-line f));读取下一行数据。
  20. (if;判断是否已经读到文件的末尾。
  21. (= s nil)
  22. (princ "\已经完成读取\n")
  23. (setq s (DeleteBlank s));未读到文件的末尾,去掉字符串前的一个空格。
  24. )
  25. )

  26. (while
  27. (= (substr s 1 1) ",");如果变量s不是逗号,则跳出此循环,否则读取下一行。
  28. (setq s (read-line f));读取下一行数据。
  29. (while
  30. (= s "");如果变量s不是空字符串,则跳出此循环,否则读取下一行数据。
  31. (setq s (read-line f));读取下一行数。
  32. (if;判断是否已经读到文件的末尾。
  33. (= s nil)
  34. (princ "\已经完成读取\n")
  35. (setq s (DeleteBlank s));未读到文件的末尾,去掉字符串前的一个空格。
  36. )
  37. )
  38. )

  39. (if
  40. (/= s nil);如果不是文件的末尾,则调用Draw函数画点、标注。
  41. (Draw s);调用画点及标注函数,调用一次来画并标注一个点。
  42. (princ)
  43. )
  44. (if
  45. (/= s nil);如果不是文件的末尾,则累加读入的点数。
  46. (setq n (+ n 1))
  47. )
  48. )
  49. (close f);关闭文件。
  50. (setvar "cmdecho" savecmdecho)
  51. (setvar "osmode" saveosmode)
  52. (setvar "snapmode" savesnapmode)
  53. (prompt (strcat "\n逗号隔符文件的点数据已经读取完毕;共读入<"(itoa n)">个点;程序作者:王军锋"))
  54. (princ)
  55. )

  56. (defun Draw (s0 / s1 k1 k2 k3 x y z x1 y1 z1 pt1 DH);定义画点及标注函数。
  57. (setq s1 s0)
  58. (setq s1 (CommaFirst s1));调用CommaFirst函数,来判断变量是否到达了以逗号为开头,如果则掉字符串逗号前面的子字符串;并把CommaFirst函数的返回值赋值给变量s1。
  59. (setq k1 (- (strlen s0) (strlen s1)));计算出字符串中第一个子字符串(即点号)的长度。
  60. (setq DH (substr s0 1 k1));把字符串中第一个子字符串赋值给变量DH。
  61. (setq s1 (substr s1 2));把以逗号开头的字符串的最前面的逗号去掉。
  62. (setq s1 (CommaFirst s1));调用CommaFirst函数
  63. (setq k2 (- (strlen s0) (strlen s1)));计算出字符串中第2个子字符串(即点号)的长度。
  64. (setq x (substr s0 (+ k1 2) (- k2 (+ k1 1))));把字符串中第2个子字符串赋值给变量x。
  65. (setq s1 (substr s1 2));把以逗号开头的字符串的最前面的逗号去掉。
  66. (setq s1 (CommaFirst s1));调用CommaFirst函数
  67. (setq k3 (- (strlen s0) (strlen s1)));计算出字符串中第3个子字符串(即点号)的长度。
  68. (setq y (substr s0 (+ k2 2) (- k3 (+ k2 1))));把字符串中第3个子字符串赋值给变量y。
  69. (setq s1 (substr s1 2));把以逗号开头的字符串的最前面的逗号去掉。
  70. (setq z s1);把字符串中第4个子字符串赋值给变量z。
  71. (setq x1 (atof x) y1 (atof y) z1 (atof z));把字符串转换为实数。
  72. (setq pt1 (list x1 y1 z1));创建点列表。
  73. (command ".pdmode" "3");设置点的显示样式为“X”。
  74. (command ".pdsize" ".5");设置点的显示大小为绝对尺寸0.5。
  75. (command ".point" pt1);画点。
  76. (setq DH (strcat " " DH));用strcat函数在变量DH前加一个有空格。
  77. (command ".text" "j" "ml" pt1 1.2 0 DH);标注点号,要更改字体的大小只需把本行括号内的2更改即可。
  78. )

  79. (defun CommaFirst (s2);CommaFirst函数,来判断变量是否到达了以逗号为开头,如果则去掉字符串逗号前面的子字符串。
  80. (while
  81. (/= (substr s2 1 1) ",");判断变量是否到达了以逗号为开头,如果是则退出循环。
  82. (setq s2 (substr s2 2));去掉字符串逗号前面的子字符串。
  83. )
  84. )

  85. (defun DeleteBlank (s3);DeleteBlank函数,去掉字符串最前面的空格。
  86. (if
  87. (= " " (substr s3 1 1));判断字符串前面是否有空格。如果有则执行while循环,否则执行(setq s3 s3)这一行。
  88. (while
  89. (= " " (substr s3 1 1))
  90. (setq s3 (substr s3 2));去掉字符串最前面的一个空格,如果去掉一个空格后已无空格,则返回已经去掉空格的字符串。
  91. )
  92. (setq s3 s3);不是以空格开头的字符串,则返回其原值。
  93. )
  94. )






上一篇:cons为什么比append处理更高效
下一篇:AutoCAD下 cc检查公差标注H05x用Lisp源程序

帖子地址: 

本帖被以下淘专辑推荐:

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

本版积分规则

本站所有资料仅供大家学习之用,商用请务必购买正版版权!有侵权之处,请联系管理员(QQ:119891935)删除!
快速回复 返回顶部 返回列表