乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 22|回复: 9

[编程交流] Lisp绘制现有标高Li

[复制链接]

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 19:48:34 | 显示全部楼层 |阅读模式
你好
 
我是lisp循环的新手。我想在地形测量平面图的高程上绘制现有地形线。附着在标高顶部的测量图,获取x坐标以单击测量平面中的点,并输入z坐标。平面上的这些(x,z)将在立面上绘制多段线为(x,y)。图纸单位为毫米,平面图上显示的数据为米。
 
204837tzwik136dpvx5vrn.jpg
 
我试着写lisp如下。我真的不知道如何使用“while”列表。
 
  1. (defun c:Elevel (/ x1 l1 y1 pt1 x2 l2 y2 pt2)
  2. (setq x1 (rtos (car (getpoint "\nPick Point1: ")) 2 2))
  3. (setq l1 (getreal "\nEnter Level1: "))
  4. (setq y1 (rtos (* l1 1000) 2 2))
  5. (setq pt1 (strcat x1 "," y1))
  6. (while (/= nil
  7.      (setq x2 (rtos (car (getpoint "\nPick Point2: ")) 2 2))
  8.      (setq l2 (getreal "\nEnter Level2: "))
  9.      (setq y2 (rtos (* l2 1000) 2 2))
  10.      (setq pt2 (strcat x2 "," y2))
  11. )
  12.    (command "_pline" pt1 pt2 "")
  13.    (setq pt1 pt2)
  14. )
  15. (princ)
  16. )

 
提前感谢,
杰克
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 20:00:45 | 显示全部楼层
多段线不连续。和退出错误。谁能帮我修Lisp程序吗?
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 20:06:00 | 显示全部楼层
请帮帮我。。。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:09:32 | 显示全部楼层
像这样的?
 
  1. (defun c:Elevel (/ l1 p1 l2 p2)
  2. (if (and (setq p1 (getpoint "\nPick Point 1: "))
  3.           (setq l1 (getreal "\nEnter Level 1: "))
  4.      )
  5.    (progn
  6.      (setq p1 (strcat (rtos (car p1) 2 2) "," (rtos (* l1 1000.) 2 2)))
  7.      (while (and (setq p2 (getpoint "\nPick Point2: "))
  8.                  (setq l2 (getreal "\nEnter Level2: "))
  9.             )
  10.        (command "_pline"
  11.                 "_non"
  12.                 p1
  13.                 "_none"
  14.                 (setq p2
  15.                        (strcat (rtos (car p2) 2 2) "," (rtos (* l2 1000.) 2 2))
  16.                 )
  17.                 ""
  18.        )
  19.        (setq p1 p2)
  20.      )
  21.    )
  22. )
  23. (princ)
  24. )
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 20:17:26 | 显示全部楼层
是的,差不多吧。
谢谢塔瓦。循环现在可以了。但普林仍不连续。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 20:28:25 | 显示全部楼层
你只需要选择文字或十字架,如果它有一个Z来获得高程值,这是一个额外的步骤,不需要,如果文字插入在交叉点,那么你可以使用它来计算X,Y。缺少的位是计算点之间的真实距离,我在你的代码中看不到,它可能更容易制作一个点列表,然后一次绘制pline。你是否从一个X,Y,Z的CSV文件中创建了点,那么只使用它,而不拾取任何点会更容易。
回复

使用道具 举报

6

主题

62

帖子

57

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 20:30:08 | 显示全部楼层
你好
 
此外,您必须深入研究AutoLISP以生成连续多段线。
 
  1.   (setq file (open name "r"))                        ; Open file for second read
  2. (entmake '((0 . "polyline")
  3.             (66 . 1)
  4.             (62 . 5)))
  5. (entmake '((0 . "vertex")(10 0 0 0)))              ; Set init polyline point
  6. (setq info (read-line file))                       ; Read data line
  7. (while (/= info nil)
  8.     (setq data (read (strcat "(" info ")"))         ; Convert to list
  9.                x1 (nth 2 data)                      ; Point Resist
  10.                y1 (car data)                        ; Y coord (depth)
  11.                y2 (* y1 -10)                        ; Plot Y's downward
  12.                x2 (* (* x1 0.2) 10)
  13.                )                                    ; end setq
  14.                (entmake  (list '(0 . "vertex") (list 10 x2 y2 0)))
  15.                (setq info (read-line file))
  16.     )                                               ; end while
  17.   (entmake '((0 . "seqend")))                       ; Close polyline
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 20:36:52 | 显示全部楼层
另一个pline例程
 
  1. (command "_pline")
  2. (while (= (getvar "cmdactive") 1 ) (command pause)
  3. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:43:53 | 显示全部楼层
试试这个程序,当你完成拣选点时,只需点击回车而不是退出按钮。
 
  1. (defun c:Test  (/ l i l1 p1 l2 p2)
  2. ;;; Tharwat 15.03.2015    ;;;
  3. (if (and (setq p1 (getpoint "\nPick Point 1: "))
  4.           (setq l1 (getreal "\nEnter Level 1: "))
  5.           )
  6.    (progn
  7.      (setq p1 (list (car p1) (* l1 1000.))
  8.            l  (cons p1 l)
  9.            )
  10.      (while (and (setq p2 (getpoint "\nPick Point2: "))
  11.                  (setq l2 (getreal "\nEnter Level2: "))
  12.                  )
  13.        (setq l (cons (setq p2
  14.                             (list (car p2) (* l2 1000.))
  15.                            )
  16.                      l)
  17.              i 0
  18.              )
  19.        (repeat (1- (length l))
  20.          (grdraw (nth i l) (nth (setq i (1+ i)) l) 2 1)
  21.          )
  22.        )
  23.      (entmakex
  24.        (append (list '(0 . "LWPOLYLINE")
  25.                      '(100 . "AcDbEntity")
  26.                      '(100 . "AcDbPolyline")
  27.                      (cons 90 (length l))
  28.                      '(70 . 0))
  29.                (mapcar (function (lambda (p) (cons 10 p))) l)))
  30.      )
  31.    )
  32. (redraw)
  33. (princ)
  34. )
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 20:55:08 | 显示全部楼层
谢谢塔瓦。lisp可以生成连续多段线,并从世界UCS绘制。但对于高程,我更改了UCS原点并围绕平面绘制高程。这些地形标高是从用户ucs绘制的。但它与用户ucs无关。它离用户ucs很远。我附上了样品图纸。请帮我查一下。谢谢
对于Lisp。图纸
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 13:43 , Processed in 1.420862 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表