用lisp语言写一段cad提取坐标代码
时间: 2023-02-06 10:16:50 浏览: 286
好的,这是用 Lisp 语言写的一段 CAD 提取坐标的代码。这段代码假设已经有了一个名为 "points" 的列表,其中包含了若干个点的坐标(x, y):
```
(defun extract-coordinates (points)
(mapcar #'(lambda (point)
(cons (car point) (cdr point)))
points))
```
这段代码使用了 Lisp 的 mapcar 函数,它会对列表中的每个元素执行给定的函数,并返回一个新的列表,这个新的列表中的元素就是函数的返回值。在这里,我们使用了一个匿名函数(也称为 lambda 函数)来处理每个点。这个函数使用了 Lisp 的 car 和 cdr 函数分别提取出点的横坐标和纵坐标,然后使用 cons 函数将它们组合成一个新的点对。最后,mapcar 函数会将所有点对组成一个新的列表并返回。
你可以这样使用这段代码:
```
(extract-coordinates '((1 2) (3 4) (5 6)))
```
这将会返回一个列表:
```
((1 2) (3 4) (5 6))
```
希望这能帮到你。
相关问题
用lisp写一段cad提取坐标代码
好的,这是一段使用 Lisp 语言编写的 CAD 提取坐标的代码示例:
```
(defun extract-coordinates (entities)
"Extract the coordinates of the given entities."
(mapcar (lambda (e) (entity-coordinates e)) entities))
(defun entity-coordinates (entity)
"Return the coordinates of the given entity."
(cond ((point-entity-p entity) (point-coordinates entity))
((line-entity-p entity) (line-coordinates entity))
((arc-entity-p entity) (arc-coordinates entity))
((circle-entity-p entity) (circle-coordinates entity))
(t (error "Unsupported entity type: ~a" entity))))
(defun point-coordinates (point)
"Return the coordinates of the given point."
(point-position point))
(defun line-coordinates (line)
"Return the coordinates of the start and end points of the given line."
(list (line-start-point line) (line-end-point line)))
(defun arc-coordinates (arc)
"Return the coordinates of the center and end points of the given arc."
(list (arc-center arc) (arc-end-point arc)))
(defun circle-coordinates (circle)
"Return the coordinates of the center and a point on the circumference of the given circle."
(list (circle-center circle) (point-on-circle circle)))
```
这段代码定义了一个 `extract-coordinates` 函数,它接受一个参数 `entities`,表示要提取坐标的实体列表。函数内部调用了 `mapcar` 函数,将列表中的每个实体都传递给 `entity-coordinates` 函数,然后将每个实体的坐标提取出来,最终将所有实体的坐标组成的列表返回。
`entity-coordinates` 函数利用 `cond` 语句,根据实体的类型调用相应的函数提取坐标。例如,如果实体是点,则调用 `point-coordinates` 函数;如果实体是线,则调用 `line-coordinates` 函数,以此类
用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 函数关闭文本文件。
希望这个代码能帮到你。
阅读全文