乐筑天下

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

[编程交流] 大型复杂表格LISP nee

[复制链接]

8

主题

42

帖子

34

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 14:32:47 | 显示全部楼层 |阅读模式
我一直在与李·麦克合作,他为我创建了一个lisp,用一系列阵列圆填充一个圆,并在每个阵列圆中放置6个点,这是一个了不起的工作:D。
 
我现在需要创建一个lisp(或修改现有的lisp),该lisp将为我创建一个表(在Excel或Acad中),显示到这些点的距离。
 
我创建了一个示例,说明了我所描绘的桌子的样子,以及需要的距离。
 
我意识到这是一项艰巨的工作,我将永远感谢任何能帮助我(我们)完成这个项目的人。到目前为止,我已经附上了我所有的东西。提前感谢您抽出时间。
edm帮助v2。lsp
表帮助示例。图纸
示例表。拉链
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:38:59 | 显示全部楼层
纽盖,
 
只要看看你的要求,你想从0度或90度作为基点排列的圆圈。
 
此时,您会注意到所有圆都以0度对齐,并从那里围绕圆均匀分布。
 
你喜欢90度的角度吗?
 
回复

使用道具 举报

8

主题

42

帖子

34

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 14:40:57 | 显示全部楼层
我不知道你的意思,我知道你到目前为止所做的是完美的。我现在只需要一个表格来生成和帮助组织距离。你能贴张照片吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:44:00 | 显示全部楼层
给这张桌子拍一张照片,我会贴一张我的意思的照片
 
  1. (defun c:cCut  (/ doc spc ofile cCnt tNum col row tmp1 tmp2
  2.                  tmp3 tmp4 bsRad cCen cNum cAng i cPt AbcPt
  3.                  theta cPtlst AbRefpt InRefpt)
  4. (vl-load-com)
  5. (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
  6.        spc (if (zerop (vla-get-activespace doc))
  7.              (if (= (vla-get-mspace doc) :vlax-true)
  8.                (vla-get-modelspace doc)
  9.                (vla-get-paperspace doc))
  10.              (vla-get-modelspace doc)))
  11. (setvar "PDMODE" 3)      ; Point Style
  12. (setvar "PDSIZE" 0.01)   ; Point Size
  13. ;; Default Retrieval
  14. (or cut:out (setq cut:out 0.05))
  15. (or cut:spc (setq cut:spc 0.007))
  16. (or cut:row (setq cut:row 0.02))
  17. (or cut:cir (setq cut:cir 0.125))
  18. ;; Circle Selection
  19. (if (and (setq cEnt (car (entsel "\nSelect Base Circle: ")))
  20.           (eq "CIRCLE" (cdr (assoc 0 (entget cEnt)))))
  21.    (progn
  22.      (setq ofile (open
  23.                    (strcat (getvar "DWGPREFIX")
  24.                            (substr (getvar "DWGNAME") 1
  25.                                    (- (strlen (getvar "DWGNAME")) 4)) ".csv") "w")
  26.            cCnt 0. tNum 0. col 1 row 1)
  27.      ;; User Input
  28.      
  29.      (initget 4)
  30.      (setq tmp1 (getreal (strcat "\nSpecify Spacing from Edge <" (rtos cut:out) "> : ")))
  31.      (or (not tmp1) (setq cut:out tmp1))
  32.      (initget 4)
  33.      (setq tmp2 (getreal (strcat "\nSpecify Circle Spacing <" (rtos cut:spc) "> : ")))
  34.      (or (not tmp2) (setq cut:spc tmp2))
  35.      (initget 4)
  36.      (setq tmp3 (getreal (strcat "\nSpecify Row Spacing <" (rtos cut:row) "> : ")))
  37.      (or (not tmp3) (setq cut:row tmp3))
  38.      (initget 6)
  39.      (setq tmp4 (getreal (strcat "\nSpecify Inner Circle Radius <" (rtos cut:cir) "> : ")))
  40.      (or (not tmp4) (setq cut:cir tmp4))
  41.      
  42.      (setq bsRad (- (cdr (assoc 40 (entget cEnt))) cut:out cut:cir)
  43.            cCen  (cdr (assoc 10 (entget cEnt))))
  44.      ;; Main Loop
  45.      
  46.      (while (and (not (minusp bsRad))
  47.                  (< cut:cir bsRad))
  48.       
  49.        (setq cNum (fix (/ (* 2 pi bsRad) (+ (* 2 cut:cir) cut:spc)))
  50.              cAng (/ (* 2 pi) cNum)
  51.              i    0)
  52.        ;; Secondary Loop
  53.       
  54.        (while (< i cNum)
  55.          (write-line "CIRCLE,X ABS,Y ABS" ofile)
  56.          (vla-put-color
  57.            (vla-addCircle spc
  58.              (vlax-3D-point
  59.                (setq cPt (polar cCen (* i cAng) bsRad))) cut:cir) col)
  60.          (setq tNum (1+ tNum) cCnt (1+ cCnt) AbcPt (mapcar '- cPt cCen))
  61.          (write-line (strcat (itoa row) "--" (rtos cCnt 2 0) (chr 44)
  62.                              (rtos (car AbcPt)) (chr 44) (rtos (cadr AbcPt))) ofile)
  63.          (write-line "POINTS,X ABS,Y ABS,X INC,Y INC" ofile)
  64.          (setq theta (atan
  65.                        (/ (/ 0.025 cut:cir)
  66.                           (sqrt
  67.                             (- 1. (expt (/ 0.025 cut:cir) 2))))))
  68.          (foreach x (setq cPtlst
  69.                            (list (cons "A" (polar cPt (* i cAng) cut:cir))
  70.                                  (cons "B" (polar cPt (- (* i cAng) (/ (+ pi cAng) 2.)) cut:cir))
  71.                                  (cons "C" (polar cPt (+ (* i cAng) pi theta) cut:cir))
  72.                                  (cons "D" (polar cPt (- (+ (* i cAng) pi) theta) cut:cir))
  73.                                  (cons "E" (polar cPt (+ (* i cAng) (/ (+ pi cAng) 2.)) cut:cir))))
  74.            (vla-addPoint spc (vlax-3D-point (cdr x)))
  75.            (setq AbRefpt (mapcar '- (cdr x) cCen)
  76.                  InRefpt (mapcar '- (cdr x) cPt))
  77.            (write-line (strcat (car x) (chr 44) (rtos (car AbRefpt)) (chr 44)
  78.                                (rtos (cadr AbRefpt)) (chr 44) (rtos (car InRefpt))
  79.                                (chr 44) (rtos (cadr InRefpt))) ofile))
  80.          (setq i (1+ i)))
  81.      
  82.        (setq bsRad (- bsRad (* 2 cut:cir) cut:row) col (abs (- col 3)) row (1+ row) cCnt 0.))
  83.      
  84.      (princ (strcat "\n<< Number of Circles: " (rtos tNum 2 0) " >>"))                  
  85.      (close ofile))
  86.    (princ "\n<!> Incorrect Selection <!>"))
  87. (princ))

 
文件保存在与图形相同的位置。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:45:34 | 显示全部楼层
目前我们有:
 
153248qutspcv3vr5umlor.jpg
 
 
您希望圆圈的排列方式如下:
 
153254iknkkwl7lszqjjjq.jpg
回复

使用道具 举报

8

主题

42

帖子

34

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 14:49:03 | 显示全部楼层
哦,是的,90度会更好。谢谢,我没听懂。他通常是在90度角进入角色。这一点很好。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:52:50 | 显示全部楼层
但是LISP#4中的当前表可以吗?
回复

使用道具 举报

8

主题

42

帖子

34

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 14:56:50 | 显示全部楼层
是的!:哈哈:太棒了!这张桌子看起来很完美!EDM操作员兴奋。他说,每次完成这种工作,你至少节省了一整天的工作。这是一年中的好几次。你还要把它旋转90度吗?我还注意到,阵列圆的中心点不再显示在图形中。这根本不是什么大问题,因为我们可以使用该表提取可能需要的任何距离,但如果不困难,并且只有在不困难的情况下,才能将点添加回阵列圆的中心?这样,如果我需要从一个中心到另一个中心进行测量,我可以简单地使用DISTANCE命令,而不是使用表中的数据进行一些trig。再说一次,这没什么大不了的,所以不要让自己失望,你做得很好D
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:59:47 | 显示全部楼层
 
太好了-我很高兴你想要它
 
 
我来看看是否可以将基“向量”旋转90度,添加中心点一点也不麻烦(如果可以的话,大约1/2行代码)。
 
干杯
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:04:05 | 显示全部楼层
这应包括旋转和点添加:
 
  1. (defun c:cCut  (/ doc spc ofile cCnt tNum col row tmp1 tmp2
  2.                  tmp3 tmp4 bsRad cCen cNum cAng i cPt AbcPt
  3.                  theta cPtlst AbRefpt InRefpt)
  4. (vl-load-com)
  5. (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
  6.        spc (if (zerop (vla-get-activespace doc))
  7.              (if (= (vla-get-mspace doc) :vlax-true)
  8.                (vla-get-modelspace doc)
  9.                (vla-get-paperspace doc))
  10.              (vla-get-modelspace doc)))
  11. (setvar "PDMODE" 3)      ; Point Style
  12. (setvar "PDSIZE" 0.01)   ; Point Size
  13. ;; Default Retrieval
  14. (or cut:out (setq cut:out 0.05))
  15. (or cut:spc (setq cut:spc 0.007))
  16. (or cut:row (setq cut:row 0.02))
  17. (or cut:cir (setq cut:cir 0.125))
  18. ;; Circle Selection
  19. (if (and (setq cEnt (car (entsel "\nSelect Base Circle: ")))
  20.           (eq "CIRCLE" (cdr (assoc 0 (entget cEnt)))))
  21.    (progn
  22.      (setq ofile (open
  23.                    (strcat (getvar "DWGPREFIX")
  24.                            (substr (getvar "DWGNAME") 1
  25.                                    (- (strlen (getvar "DWGNAME")) 4)) ".csv") "w")
  26.            cCnt 0. tNum 0. col 1 row 1)
  27.      ;; User Input
  28.      
  29.      (initget 4)
  30.      (setq tmp1 (getreal (strcat "\nSpecify Spacing from Edge <" (rtos cut:out) "> : ")))
  31.      (or (not tmp1) (setq cut:out tmp1))
  32.      (initget 4)
  33.      (setq tmp2 (getreal (strcat "\nSpecify Circle Spacing <" (rtos cut:spc) "> : ")))
  34.      (or (not tmp2) (setq cut:spc tmp2))
  35.      (initget 4)
  36.      (setq tmp3 (getreal (strcat "\nSpecify Row Spacing <" (rtos cut:row) "> : ")))
  37.      (or (not tmp3) (setq cut:row tmp3))
  38.      (initget 6)
  39.      (setq tmp4 (getreal (strcat "\nSpecify Inner Circle Radius <" (rtos cut:cir) "> : ")))
  40.      (or (not tmp4) (setq cut:cir tmp4))
  41.      
  42.      (setq bsRad (- (cdr (assoc 40 (entget cEnt))) cut:out cut:cir)
  43.            cCen  (cdr (assoc 10 (entget cEnt))))
  44.      ;; Main Loop
  45.      
  46.      (while (and (not (minusp bsRad))
  47.                  (< cut:cir bsRad))
  48.       
  49.        (setq cNum (fix (/ (* 2 pi bsRad) (+ (* 2 cut:cir) cut:spc)))
  50.              cAng (/ (* 2 pi) cNum)
  51.              i    0)
  52.        ;; Secondary Loop
  53.       
  54.        (while (< i cNum)
  55.          (write-line "CIRCLE,X ABS,Y ABS" ofile)
  56.          (vla-put-color
  57.            (vla-addCircle spc
  58.              (vlax-3D-point
  59.                (setq cPt (polar cCen (+ (/ pi 2.) (* i cAng)) bsRad))) cut:cir) col)
  60.          (vla-addPoint spc (vlax-3D-point cPt))
  61.          (setq tNum (1+ tNum) cCnt (1+ cCnt) AbcPt (mapcar '- cPt cCen))
  62.          (write-line (strcat (itoa row) "--" (rtos cCnt 2 0) (chr 44)
  63.                              (rtos (car AbcPt)) (chr 44) (rtos (cadr AbcPt))) ofile)
  64.          (write-line "POINTS,X ABS,Y ABS,X INC,Y INC" ofile)
  65.          (setq theta (atan
  66.                        (/ (/ 0.025 cut:cir)
  67.                           (sqrt
  68.                             (- 1. (expt (/ 0.025 cut:cir) 2))))))
  69.          (foreach x (setq cPtlst
  70.                            (list (cons "A" (polar cPt (+ (/ pi 2) (* i cAng)) cut:cir))
  71.                                  (cons "B" (polar cPt (+ (/ pi 2) (- (* i cAng) (/ (+ pi cAng) 2.))) cut:cir))
  72.                                  (cons "C" (polar cPt (+ (/ pi 2) (* i cAng) pi theta) cut:cir))
  73.                                  (cons "D" (polar cPt (+ (/ pi 2) (- (+ (* i cAng) pi) theta)) cut:cir))
  74.                                  (cons "E" (polar cPt (+ (/ pi 2) (* i cAng) (/ (+ pi cAng) 2.)) cut:cir))))
  75.            (vla-addPoint spc (vlax-3D-point (cdr x)))
  76.            (setq AbRefpt (mapcar '- (cdr x) cCen)
  77.                  InRefpt (mapcar '- (cdr x) cPt))
  78.            (write-line (strcat (car x) (chr 44) (rtos (car AbRefpt)) (chr 44)
  79.                                (rtos (cadr AbRefpt)) (chr 44) (rtos (car InRefpt))
  80.                                (chr 44) (rtos (cadr InRefpt))) ofile))
  81.          (setq i (1+ i)))
  82.      
  83.        (setq bsRad (- bsRad (* 2 cut:cir) cut:row) col (abs (- col 3)) row (1+ row) cCnt 0.))
  84.      
  85.      (princ (strcat "\n<< Number of Circles: " (rtos tNum 2 0) " >>"))                  
  86.      (close ofile))
  87.    (princ "\n<!> Incorrect Selection <!>"))
  88. (princ))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 00:29 , Processed in 0.578258 second(s), 74 queries .

© 2020-2025 乐筑天下

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