用visual lisp语言写一段快捷键为nv的2023版cad批量提取点坐标,生成dat文件并且由用户自定义导出到文件夹的代码
时间: 2023-02-06 12:39:15 浏览: 167
下面是一段使用 Visual Lisp 写成的代码,可以在 2023 版 CAD 中使用快捷键 nv 批量提取点的坐标,并生成一个 dat 文件,最后提示用户选择文件夹并将 dat 文件导出到该文件夹中:
(defun c:nv (/ pt1 pt2 fname)
(setq pt1 (getpoint "选择起点: "))
(setq pt2 (getpoint pt1 "选择终点: "))
(setq fname (getfiled "选择文件夹" "*.dat" "dat" 1))
(setq f (open fname "w"))
(setq x1 (car pt1))
(setq y1 (cadr pt1))
(setq x2 (car pt2))
(setq y2 (cadr pt2))
(setq i 0)
(while (<= x1 x2)
(setq i (1+ i))
(setq x1 (+ x1 0.1))
(setq y1 (+ y1 0.1))
(write-line (strcat "第" (itoa i) "个点: " (rtos x1 2) ", " (rtos y1 2)) f)
)
(close f)
(alert "完成!")
)
相关问题
用lisp语言写一段快捷键为nv的2023版cad批量提取点坐标,生成dat文件并且由用户自定义导出到文件夹的代码
好的,这是一段使用 Lisp 语言编写的代码,可以在 2023 版 CAD 中使用快捷键 `nv` 批量提取点坐标,生成 dat 文件,并由用户自定义导出到文件夹:
```
(defun c:nv (/ ss i j k ent pnt)
(setq ss (ssget))
(setq i 0)
(while (setq ent (ssname ss i))
(setq pnt (entget ent))
(setq i (1+ i))
(setq j 0)
(while (setq k (assoc j pnt))
(if (equal (cdr k) "10")
(princ (cdr (assoc 10 pnt)));; x坐标
(if (equal (cdr k) "20")
(princ (cdr (assoc 20 pnt)));; y坐标
(if (equal (cdr k) "30")
(princ (cdr (assoc 30 pnt))) ;; z坐标
)
)
)
(setq j (1+ j))
)
(princ "\n")
)
(setq fname (getfiled "请选择导出文件夹" "*.dat" "dat" 0))
(setq fp (open fname "w"))
(foreach x lst
(write-line x fp)
)
(close fp)
)
(defun getfiled (prompt default_ext filter_string initial_directory)
(vl-catch-all-apply
(function (lambda ()
(if (not initial_directory)
(setq initial_directory (getvar "dwgprefix")))
(if (not default_ext)
(setq default_ext "*"))
(if (not filter_string)
(setq filter_string default_ext))
(apply
(function vl-file-getname)
(append (list prompt default_ext filter_string initial_directory)
nil))))
(function (lambda (err)
(if (and (eq (car err) 'error) (eq (cadr err) 'function-does-not-exist))
(apply (function getfname)
(list prompt default_ext filter_string initial_directory))
(apply (function error) err))))))
```
上述代码使用了 CAD 内置的函数 `ssget` 和 `entget` 来获取选中的实体和实体信息,并使用 `princ` 函数将点的
用lisp语言写一段快捷键为nv的cad批量提取点坐标的代码
好的,这是用 Lisp 语言写的一段批量提取 CAD 图中的点坐标的代码,快捷键为 nv:
```
(defun c:nv ()
(setq ptlist (ssget))
(setq i 0)
(setq fp (open "d:\\pointlist.txt" "w"))
(while
(setq ent (ssname ptlist i))
(setq pt (entget ent))
(setq x (cdr (assoc 10 pt)))
(setq y (cdr (assoc 20 pt)))
(setq z (cdr (assoc 30 pt)))
(write-line (strcat "点" (itoa i) ": (" (rtos x 2 2) "," (rtos y 2 2) "," (rtos z 2 2) ")")) fp)
(setq i (1+ i))
)
(close fp)
)
```
代码的作用是:
- 通过快捷键 nv 调用函数 c:nv。
- 使用 ssget 函数从图形中选择点对象。
- 使用 open 函数打开文本文件 "d:\\pointlist.txt",并将文件句柄赋值给 fp。
- 循环遍历选择的点对象。
- 使用 entget 函数获取点对象的属性表。
- 使用 assoc 函数获取点的 x、y、z 坐标。
- 使用 rtos 函数将坐标值转换为字符串,并使用 strcat 函数将字符串拼接起来。
- 使用 write-line 函数将拼接后的字符串写入文本文件。
- 使用 close 函数关闭文本文件。
希望这个代码能帮到你。
阅读全文