乐筑天下

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

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

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:12:12 | 显示全部楼层
也许使用多段线?
 
  1. (defun c:sfs  (/ 3DFace vlax-list->3D-point ent 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. (defun vlax-list->3D-point (lst)
  11.    (if lst
  12.      (cons (list (car lst) (cadr lst) (caddr lst))
  13.            (vlax-list->3D-point (cdddr lst)))))
  14. (if (and *pt1 *pt2 *art
  15.           (not (initget "Yes No"))
  16.           (eq "No" (cond ((getkword "\nWould you like to reset this macro? [Yes/No] <No>)")) ("No"))))
  17.    (command "_.3DPoly" *pt1 *pt2 pause pause "_C")
  18.    (progn
  19.      (initget 1 "Rectangular Circular")
  20.      (setq *art (getkword "\nWhat type of Array? [Rectangular/Circular] : "))
  21.      (command "_.3DPoly" pause pause pause pause "_C")))
  22. (if (eq "POLYLINE" (cdr (assoc 0 (entget (setq ent (entlast))))))
  23.    (progn
  24.      (apply '3DFace (setq ptLst (vlax-list->3D-point
  25.                                   (vlax-get
  26.                                     (vlax-ename->vla-object ent) 'Coordinates))))
  27.      (entdel ent)
  28.      (cond (  (eq *art "Rectangular")
  29.               (setq *pt1 (nth 3 ptLst) *pt2 (nth 2 ptLst)))
  30.            (  (eq *art "Circular")
  31.               (setq *pt1 (nth 0 ptLst) *pt2 (nth 3 ptLst))))))
  32. (princ))
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 12:19:47 | 显示全部楼层
没想到会这么容易。。。工作得很好。。。如果你不介意的话,你会如何循环它,这样一旦你选择了一个矩形或圆形阵列,你就可以继续制作多段线/面?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:23:39 | 显示全部楼层
“没想到会这么容易。”。。。我使用Visual LISP实现了这一点,并使用递归函数将点列表转换为三维点列表-我不会说这是一个“简单”的转换。
 
使用While函数循环程序。
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 12:27:33 | 显示全部楼层
嘿,李。。。
 
我只是稍微改变了一下,现在我有问题了。。。我为*art添加了一个默认值,这样当提示输入数组类型时,用户可以点击enter键,使用默认值(如果这是第一次运行),或者使用最后一个使用的条目:
 
  1. (defun c:sfs  (/ 3DFace vlax-list->3D-point ent ptLst)
  2. (setq *art (if (not *art) "Rectangular" *art)
  3. old_art *art)
  4. (defun 3DFace (p1 p2 p3 p4)
  5.    (entmakex (list (cons 0 "3DFACE")
  6.                    (cons 8 "Temp")
  7.                    (cons 10 p1)
  8.                    (cons 11 p2)
  9.                    (cons 12 p3)
  10.                    (cons 13 p4)
  11.                    (cons 70 15))))
  12. (defun vlax-list->3D-point (lst)
  13.    (if lst
  14.      (cons (list (car lst) (cadr lst) (caddr lst))
  15.            (vlax-list->3D-point (cdddr lst)))))
  16. (if (and *pt1 *pt2 *art
  17.           (not (initget "Yes No"))
  18.           (eq "No" (cond ((getkword "\nWould you like to reset this macro? [Yes/No] <No>)")) ("No"))))
  19.    (command "_.3DPoly" *pt1 *pt2 pause pause "_C")
  20.    (progn
  21.      (initget "Rectangular Circular")
  22.      (setq art_r (if (= *art "Rectangular") "<Rectangular>" "Rectangular")
  23.     art_c (if (= *art "Circular") "<Circular>" "Circular")
  24.     art_pmt (strcat "\nWhat type of Array? [" art_r "/" art_c "]: ")
  25.     *art (getkword art_pmt)
  26.     *art (if (= *art "")
  27.     old_art
  28.     *art))        
  29.      (command "_.3DPoly" pause pause pause pause "_C")))
  30. (if (eq "POLYLINE" (cdr (assoc 0 (entget (setq ent (entlast))))))
  31.    (progn
  32.      (apply '3DFace (setq ptLst (vlax-list->3D-point
  33.                                   (vlax-get
  34.                                     (vlax-ename->vla-object ent) 'Coordinates))))
  35.      (entdel ent)
  36.      (cond (  (eq *art "Rectangular")
  37.               (setq *pt1 (nth 3 ptLst) *pt2 (nth 2 ptLst)))
  38.            (  (eq *art "Circular")
  39.               (setq *pt1 (nth 0 ptLst) *pt2 (nth 3 ptLst))))))
  40. (princ))

 
但现在在我运行一次后,它不会问我是否要重置宏或使用以前使用的点。
 
有什么想法吗?
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 12:29:57 | 显示全部楼层
好的,所以只有当我尝试做一个矩形阵列时它才会这样做????到底发生了什么?
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 12:34:44 | 显示全部楼层
成功了,但不知道为什么。。。。我去掉了在第一行声明局部变量,现在它可以工作了,但我不知道这会有什么影响。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:00 , Processed in 0.840284 second(s), 62 queries .

© 2020-2025 乐筑天下

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