乐筑天下

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

[编程交流] 更快的连续3dFaces Li

[复制链接]

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 11:31:44 | 显示全部楼层 |阅读模式
大家好,
 
很多时候,当我对绘制的对象进行曲面处理时,我的曲面共享一条边(和两个垂直度),因此,我不需要两次拾取这些点,而是希望使用lisp,获取为垂直度3和4选择的点,并将其保存,以便稍后分别作为垂直度2和1使用。
 
以下是我目前掌握的信息:
 
  1. (defun c:sfs ()
  2. (if (eq rst "")
  3.    (setq rst "Yes")
  4.    (progn
  5.      (initget "Yes No")
  6.      (setq rst (getkword "\nWould you like to reset this macro? (Y, <N>)"))))
  7. (if (eq rst "Yes")
  8.    (progn
  9.      (setq art ""
  10.     pt1 ""
  11.     pt2 ""
  12.     pt3 ""
  13.     pt4 ""
  14.     px1 ""
  15.     px2 ""
  16.     px3 ""
  17.     px4 ""
  18.     py1 ""
  19.     py2 ""
  20.     py3 ""
  21.     py4 ""
  22.     pz0 ""
  23.     edh "")
  24.      (initget 1 "Rectangular Circular")
  25.      (setq art (getkword "\nWhat type of Array?< Rectangular Circular >: "))
  26.      (command "_.pline" pause pause pause pause "cl"))
  27.    (progn
  28.      (command "_.pline" pt1 pt2 pause pause "cl")))
  29. (setq pl1 (mapcar 'cdr(vl-remove-if '(lambda(x)(/= 10(car x)))(entget(entlast))))
  30. px1 (car   (nth 0 pl1))
  31. py1 (cadr  (nth 0 pl1))
  32. pz0 (nth 0 (mapcar 'cdr(vl-remove-if '(lambda(x)(/= 38(car x)))(entget(entlast)))))
  33. px2 (car   (nth 1 pl1))
  34. py2 (cadr  (nth 1 pl1))
  35. px3 (car   (nth 2 pl1))
  36. py3 (cadr  (nth 2 pl1))
  37. px4 (car   (nth 3 pl1))
  38. py4 (cadr  (nth 3 pl1))
  39. pt1 (list px1 py1 pz0)
  40. pt2 (list px2 py2 pz0)
  41. pt3 (list px3 py3 pz0)
  42. pt4 (list px4 py4 pz0))
  43. (command "_.erase" "l" "")
  44. (entmake (list (cons 0 "3DFACE")
  45.   (cons 8 "Temp")
  46.   (cons 100 "AcDbEntity")
  47.   (cons 100 "AcDbFace")
  48.   (cons 10 pt1)
  49.   (cons 11 pt2)
  50.   (cons 12 pt3)
  51.   (cons 13 pt4)
  52.   (cons 70 15))))
  53. (cond (eq art "Rectangular") (progn
  54.       (setq pt1 (list px4 py4 pz0)
  55.      pt2 (list px3 py3 pz0)))
  56.       
  57. (eq art "Circular")    (progn
  58.       (setq pt1 (list px1 py1 pz0)
  59.      pt2 (list px4 py4 pz0))))
  60. )

 
我离得很近,但最终并没有改变pt1和pt2的坐标。
 
任何帮助都是非常感激的。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:35:50 | 显示全部楼层
我真的不建议这样做:
 
  1.      (setq art ""
  2.     pt1 ""
  3.     pt2 ""
  4.     pt3 ""
  5.     pt4 ""
  6.     px1 ""
  7.     px2 ""
  8.     px3 ""
  9.     px4 ""
  10.     py1 ""
  11.     py2 ""
  12.     py3 ""
  13.     py4 ""
  14.     pz0 ""
  15.     edh "")

 
只需定位变量。
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 11:40:32 | 显示全部楼层
为什么?会出什么问题?本地化变量的问题是,我希望在下次运行lisp时保留点1和2的值。这就是存储这些值的全部意义,这样我就不必在每个点上点击两次。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:44:01 | 显示全部楼层
 
很多事情,它们可能会与其他程序冲突,出于某种原因,您正在将它们全部设置为空字符串。。。?
 
您可以将点1和2保留为全局变量,但所有其余的都可以本地化。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:50:47 | 显示全部楼层
这样怎么样:
 
  1. (defun c:sfs  (/ 3DFace ent z ptLst)
  2. (defun 3DFace (p1 p2 p3 p4)
  3.    (entmakex (list (cons 0 "3DFACE")
  4.                    (cons 8 "Temp")
  5.                    (cons 10 p1)
  6.                    (cons 11 p2)
  7.                    (cons 12 p3)
  8.                    (cons 13 p4)
  9.                    (cons 70 15))))
  10. (if (and *pt1 *pt2 *art
  11.           (not (initget "Yes No"))
  12.           (eq "No" (cond ((getkword "\nWould you like to reset this macro? (Y, <N>)")) ("No"))))
  13.    (command "_.pline" *pt1 *pt2 pause pause "_C")
  14.    (progn
  15.      (initget 1 "Rectangular Circular")
  16.      (setq *art (getkword "\nWhat type of Array?< Rectangular Circular >: "))
  17.      (command "_.pline" pause pause pause pause "_C")))
  18. (if (eq "LWPOLYLINE" (cdr (assoc 0 (entget (setq ent (entlast))))))
  19.    (progn
  20.      (setq z (cond ((cdr (assoc 39 (entget ent)))) (0.0)))
  21.       
  22.      (apply '3DFace (setq ptLst (mapcar
  23.                                   (function
  24.                                     (lambda (x)
  25.                                       (append x (list z))))
  26.                                   (mapcar (function cdr)
  27.                                           (vl-remove-if-not
  28.                                             (function
  29.                                               (lambda (x) (= 10 (car x)))) (entget ent))))))
  30.      (entdel ent)
  31.      (cond (  (eq *art "Rectangular")
  32.               (setq *pt1 (nth 3 ptLst) *pt2 (nth 2 ptLst)))
  33.            (  (eq *art "Circular")
  34.               (setq *pt1 (nth 0 ptLst) *pt2 (nth 3 ptLst))))))
  35. (princ))
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 11:54:14 | 显示全部楼层
是的,效果很好。。。但我仍然想知道为什么我的方式不起作用。有什么见解吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:56:03 | 显示全部楼层
 
您的COND语句没有正确定义的文本表达式。
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 12:00:29 | 显示全部楼层
明白了,再次感谢你的帮助。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:06:39 | 显示全部楼层
 
不客气
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 12:11:19 | 显示全部楼层
嘿,李,我刚刚意识到这个问题。。。它仅在顶部ucs上创建三维面。。。标高为“0”。我想用它来创建三维面,在ucs上绘制多段线。
 
我认为这与使用LWPOLYLINE有关,但我不知道如何更改它。
 
有什么建议吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:05 , Processed in 0.820134 second(s), 72 queries .

© 2020-2025 乐筑天下

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