乐筑天下

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

[编程交流] 调试帮助

[复制链接]

5

主题

26

帖子

21

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 08:19:13 | 显示全部楼层 |阅读模式
大家好,
我试着用lisp从起点pstart到最近的点,等等。。。。直到最后一点选择-但不起作用。也许有人会帮我调试代码?谢谢
 
  1. (defun c:pol (/ Pdata Pordata)
  2. (setq pstart (getpoint "\nPunct start:"))
  3. (setq ss (ssget '((0 . "point"))))
  4. (repeat (- (sslength ss) 1)
  5.    (repeat (setq i (sslength ss))
  6.      (setq e      (entget (ssname ss (setq i (1- i))))
  7.        Pdata
  8.          (cons
  9.            (list
  10.              (setq p (cdr (assoc 10 e)))
  11.              (setq dist
  12.                 (distance pstart
  13.                       (cdr (assoc 10 e))
  14.                 )
  15.              )
  16.            )
  17.            Pdata
  18.          )
  19.      )
  20.    )
  21.    (setq Pordata (cdr
  22.            (vl-sort
  23.              Pdata
  24.              (function
  25.            (lambda    (e1 e2)
  26.              (< (cadr e1) (cadr e2))
  27.            )
  28.              )
  29.            )
  30.          )
  31.    )
  32.    (command "_.line" pstart (car (car pordata)) "")
  33.    (setq Pordata (cdr Pordata))
  34.    (setq pstart (car (car pordata)))
  35.    (ssdel (ssname ss 0) ss)
  36. )
  37. )
回复

使用道具 举报

5

主题

26

帖子

21

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 08:26:52 | 显示全部楼层
如果我知道某个点的坐标,如何从选择集中删除该点?
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-6 08:37:15 | 显示全部楼层
您可以创建点列表并在该列表上工作,而不是每次都在选择集中工作。
这是我的尝试:
  1. (defun C:TEST ( / ss_first ss_rest e1 i lst p1)
  2. (if
  3. (and
  4.    (princ "\nSelect first point")
  5.    (setq ss_first (ssget ":E:S" '((0 . "POINT"))))
  6.    (princ "\nSelect the others points")
  7.    (setq ss_rest (ssget  '((0 . "POINT"))))
  8.    )
  9. (progn
  10.    (ssdel (setq e1 (ssname ss_first 0)) ss_rest)
  11.    (setq p1 (cdr (assoc 10 (entget e1))))
  12.    (repeat (setq i (sslength ss_rest))
  13.      (setq lst (cons (cdr (assoc 10 (entget (ssname ss_rest (setq i (1- i)))))) lst))
  14.      )
  15.    (while lst
  16.      (entmake (list '(0 . "LINE")
  17.                    (cons 10 p1)
  18.                    (cons 11 (setq p1 (car (setq lst (vl-sort lst '(lambda (x y) (< (distance x p1) (distance y p1))))))))
  19.                    )
  20.              )
  21.      (setq lst (cdr lst))
  22.      )
  23.    )
  24. )
  25. (princ)
  26. )
回复

使用道具 举报

5

主题

26

帖子

21

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 08:39:33 | 显示全部楼层
谢谢Stefan,你是我的天使!
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:49:56 | 显示全部楼层
以下是我的尝试:
 
  1. (defun pointsarray ( ptst ptl / dptpt dptptlst mindptpt pten ptl )
  2. (foreach pt ptl
  3.    (setq dptpt (distance ptst pt))
  4.    (setq dptptlst (cons dptpt dptptlst))
  5. )
  6. (setq dptptlst (vl-remove 0.0 dptptlst))
  7. (setq mindptpt (eval (cons 'min dptptlst)))
  8. (mapcar '(lambda (pt) (if (= (distance ptst pt) mindptpt) (setq pten pt))) ptl)
  9. (setq ptlst (cons ptst ptlst))
  10. (setq ptl (vl-remove ptst ptl))
  11. (if (not (null ptl)) (pointsarray pten ptl) )
  12. ptlst
  13. )
  14. (defun c:pts2lines ( / ss ssn pt ptl ptst ptlst )
  15. (prompt "\nSelect points that you want to connect them with lines")
  16. (setq ss (ssget '((0 . "POINT") (210 0.0 0.0 1.0)) ))
  17. (setq ssn (sslength ss) i ssn)
  18. (repeat ssn
  19.    (setq pt (cdr (assoc 10 (entget (ssname ss (setq i (1- i)))))))
  20.    (setq ptl (cons pt ptl))
  21. )
  22. (setq ptl (reverse ptl))
  23. (vl-cmdf "_.OSNAP" "node")
  24. (setq ptst (getpoint "\nPick start point from witch to create continous array of lines obtained from rest of selected points"))
  25. (setq ptlst (pointsarray ptst ptl))
  26. (vl-cmdf "_.LINE")
  27. (foreach pt ptlst
  28.    (vl-cmdf pt)
  29. )
  30. (vl-cmdf "")
  31. (princ)
  32. )

M、 R。
P、 S.Stefan的代码更好,我的代码限制在256点上。。。
回复

使用道具 举报

5

主题

26

帖子

21

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 08:58:30 | 显示全部楼层
我如何定义这些点p1,p2。。。pn,以这种方式:
 
(setq p1(极性(第n个0 Pdata)(第n个0 Udata)(第n个0 Ddata)))
(setq p2(极性p1(第n个1 Udata)(第n个1 Ddata)))
(setq p3(极轴p2(第2个Udata)(第2个Ddata)))
...
...
(setq pn(极性p(n-1)(第n(-n 1)个Udata)(第n(-n 1)个Ddata)))
 
Pdata、Udata、Ddata-列表
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-6 09:04:43 | 显示全部楼层
所以你有一个可变的点数。。
最好将您的点存储在列表中,如下所示:
  1. (mapcar '(lambda (u d) (setq p (polar (if p p (car Pdata)) u d))) Udata Ddata)
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-6 09:07:48 | 显示全部楼层
注意p变量。如果在调用(mapcar…之前不是nil,则可能会出错。
也许 吧:
  1. (defun test (Pdata Udata Ddata / p)
  2. (setq p (car Pdata))
  3. (mapcar '(lambda (u d) (setq p (polar p u d))) Udata Ddata)
  4. )
  5. (setq lst (test Pdata Udata Ddata))
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-6 09:16:20 | 显示全部楼层
或者这个
  1. ((lambda (p u d) (mapcar '(lambda (u d) (setq p (polar p u d))) u d)) (car Pdata) Udata Ddata)
回复

使用道具 举报

5

主题

26

帖子

21

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 09:23:00 | 显示全部楼层
谢谢你,斯特凡!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 08:21 , Processed in 0.637811 second(s), 72 queries .

© 2020-2025 乐筑天下

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