乐筑天下

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

[编程交流] 条件问题

[复制链接]

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 19:55:30 | 显示全部楼层 |阅读模式
你好
 
我已经计算了2个表的输入,我希望用户给出3个选择,其中一个绘制:第一个表,第二个表或两个表。如果我像下面这样做,我必须将表代码写3次,还是效率更高?
 
  1. (initget "1 2 3")
  2. (setq choice
  3. (getkword ( "\nTable for Position 1 [2]\Table for Position 2 [3]\<Table for Both Positions [1]>: ")
  4. )
  5. (COND
  6.     ((= choice "2")
  7.         Table code
  8.     )
  9.     ((= choice "3")
  10.         Table code
  11.     )
  12.     (T
  13.         Table code both tables with a repeat
  14.     )
  15. )

 
 
 
 
这是我当前绘制这两个表的代码:
  1. (setq tbl_pt1 (vlax-3D-point 312 289))
  2. (setq tbl_pt2 (vlax-3D-point 312 227.828))
  3. (setq num 1)
  4. (if (/= "" lay)
  5.   (progn
  6.      (repeat 2
  7.         (setq rows (+ (length lbl_names) 2))
  8.         (setq objtable
  9.            (vla-addtable
  10.               (vla-get-block (vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) lay))
  11.               (eval (read (strcat "tbl_pt" (itoa num))))
  12.               rows 10 4.652 9.356
  13.            )
  14.         )
  15.         (vla-settext objtable 0 0 (strcat "STINGRAY ANCHORS POSITION " (itoa num)))
  16.         (vla-settext objtable 1 1 "EASTING")
  17.         (vla-settext objtable 1 3 "NORTHING")
  18.         (vla-settext objtable 1 5 "ANGLE")
  19.         (vla-settext objtable 1 6 "LENGTH ANCHORE WIRE")
  20.         (vla-settext objtable 1 7 "MIDLINE BUOY 1 *")
  21.         (vla-settext objtable 1 8 "MIDLINE BUOY 2 *")
  22.         (vla-settext objtable 1 9 "MIDLINE BUOY 3 *")
  23.         (vla-MergeCells objtable 1 1 1 2)
  24.         (vla-MergeCells objtable 1 1 3 4)
  25.         (vla-put-HorzCellMargin objtable 0.25)
  26.         (vla-put-VertCellMargin objtable 0.25)  
  27.         (vla-setrowheight objtable 1 10)
  28.         (vla-setcolumnwidth objtable 0 15.182); 0 is first column
  29.         (vla-setcolumnwidth objtable 1 4.756)
  30.         (vla-setcolumnwidth objtable 2 13.956)
  31.         (vla-setcolumnwidth objtable 3 4.756)
  32.         (vla-setcolumnwidth objtable 4 13.956)
  33.         (vla-setcolumnwidth objtable 5 9.969)
  34.         (foreach col '(6 7 8 9)
  35.            (vla-setcelltextheight objtable 1 col 1.25)
  36.            (vla-setcolumnwidth objtable col 9.356)
  37.         )
  38.            ; Fill Table With Anchor Wire Details
  39.         (if (/= (length lbl_names) nil)
  40.            (progn
  41.               ;Add Anchor Labels to table
  42.               (setq row 2)
  43.               (foreach item lbl_names
  44.                     (vla-settext objtable row 0 item)
  45.                     (setq row (1+ row))
  46.               )
  47.               ;Add X= Labels to table
  48.               (setq row 2)
  49.               (while (< row (+ (length lbl_names) 2))
  50.                  (vla-settext objtable row 1 "X=")
  51.                  (setq row (1+ row))
  52.               )
  53.               ;Add Anchor Wire End Easting values to table
  54.               (setq row 2)
  55.               (foreach item anchor_east
  56.                  (vla-settext objtable row 2 (rtos item 2 0))
  57.                  (setq row (1+ row))
  58.               )
  59.               ;Add X= Labels to table
  60.               (setq row 2)
  61.               (while (< row (+ (length lbl_names) 2))
  62.                  (vla-settext objtable row 3 "Y=")
  63.                  (setq row (1+ row))
  64.               )
  65.               ;Add Anchor Wire End Northing values to table
  66.               (setq row 2)
  67.               (foreach item anchor_north
  68.                  (vla-settext objtable row 4 (rtos item 2 0))
  69.                  (setq row (1+ row))
  70.               )
  71.               ;Add Anchor Wire Angle values to table
  72.               (setvar "DIMZIN"
  73.               (setq row 2)
  74.               (foreach item (eval (read (strcat "anchor_angles" (itoa num))))
  75.                  (vla-settext objtable row 5 (strcat (rtos item 2 1) "%%D"))
  76.                  (setq row (1+ row))
  77.               )
  78.               (setvar "DIMZIN" 1)
  79.               ;Add Anchor Wire Distance values to table
  80.               (setq row 2)
  81.               (foreach item (eval (read (strcat "anchor_distance" (itoa num))))
  82.                  (vla-settext objtable row 6 (rtos item 2 0))
  83.                  (setq row (1+ row))
  84.               )
  85.               ;Add Anchor Wire Midline Buoy 1 values to table
  86.               (setq row 2)
  87.               (foreach item anchor_buoy1
  88.                  (if (= item nil)
  89.                     (vla-settext objtable row 7 "")
  90.                  )
  91.                  (if (/= item nil)
  92.                     (vla-settext objtable row 7 item)
  93.                  )
  94.                  (setq row (1+ row))
  95.               )
  96.               ;Add Anchor Wire Midline Buoy 2 values to table
  97.               (setq row 2)
  98.               (foreach item anchor_buoy2
  99.                  (if (= item nil)
  100.                     (vla-settext objtable row 8 "")
  101.                  )
  102.                  (if (/= item nil)
  103.                     (vla-settext objtable row 8 item)
  104.                  )
  105.                  (setq row (1+ row))
  106.               )
  107.               ;Add Anchor Wire Midline Buoy 3 values to table
  108.               (setq row 2)
  109.               (foreach item anchor_buoy3
  110.                  (if (= item nil)
  111.                     (vla-settext objtable row 9 "")
  112.                  )
  113.                  (if (/= item nil)
  114.                     (vla-settext objtable row 9 item)
  115.                  )
  116.                  (setq row (1+ row))
  117.               )
  118.            )
  119.         )
  120.         (setq num (1+ num))
  121.      )
  122.   )
  123. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 20:09:11 | 显示全部楼层
如果我理解正确:
  1. ((or (= choice "2")
  2.     (= choice "3"))
  3.         Table code
  4.     )

 

  1. ((member choice '("2" "3"))
  2.     table code
  3. )

 
-大卫
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:20:55 | 显示全部楼层
是的,但是,选择2和3的表格数据不同。这就是为什么我使用(setq num 1)和(eval(read(strcat“anchor\u angles”(itoa num)))来更改列表名称
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:39:28 | 显示全部楼层
将生成表格的代码构造为一个单独的函数,表格插入点(以及在选项之间更改的任何其他参数)作为函数的参数。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:52:17 | 显示全部楼层
例如,作为对代码的快速修改:
 
表函数可以是(根据需要本地化变量):
  1. (defun createtables ( lst num )
  2.    (if (/= "" lay)
  3.       (progn
  4.          (foreach ins lst
  5.             (setq rows (+ (length lbl_names) 2))
  6.             (setq objtable
  7.                (vla-addtable
  8.                   (vla-get-block (vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) lay))
  9.                   ins
  10.                   rows 10 4.652 9.356
  11.                )
  12.             )
  13.             (vla-settext objtable 0 0 (strcat "STINGRAY ANCHORS POSITION " (itoa num)))
  14.             (vla-settext objtable 1 1 "EASTING")
  15.             (vla-settext objtable 1 3 "NORTHING")
  16.             (vla-settext objtable 1 5 "ANGLE")
  17.             (vla-settext objtable 1 6 "LENGTH ANCHORE WIRE")
  18.             (vla-settext objtable 1 7 "MIDLINE BUOY 1 *")
  19.             (vla-settext objtable 1 8 "MIDLINE BUOY 2 *")
  20.             (vla-settext objtable 1 9 "MIDLINE BUOY 3 *")
  21.             (vla-MergeCells objtable 1 1 1 2)
  22.             (vla-MergeCells objtable 1 1 3 4)
  23.             (vla-put-HorzCellMargin objtable 0.25)
  24.             (vla-put-VertCellMargin objtable 0.25)  
  25.             (vla-setrowheight objtable 1 10)
  26.             (vla-setcolumnwidth objtable 0 15.182); 0 is first column
  27.             (vla-setcolumnwidth objtable 1 4.756)
  28.             (vla-setcolumnwidth objtable 2 13.956)
  29.             (vla-setcolumnwidth objtable 3 4.756)
  30.             (vla-setcolumnwidth objtable 4 13.956)
  31.             (vla-setcolumnwidth objtable 5 9.969)
  32.             (foreach col '(6 7 8 9)
  33.                (vla-setcelltextheight objtable 1 col 1.25)
  34.                (vla-setcolumnwidth objtable col 9.356)
  35.             )
  36.                ; Fill Table With Anchor Wire Details
  37.             (if (/= (length lbl_names) nil)
  38.                (progn
  39.                   ;Add Anchor Labels to table
  40.                   (setq row 2)
  41.                   (foreach item lbl_names
  42.                         (vla-settext objtable row 0 item)
  43.                         (setq row (1+ row))
  44.                   )
  45.                   ;Add X= Labels to table
  46.                   (setq row 2)
  47.                   (while (< row (+ (length lbl_names) 2))
  48.                      (vla-settext objtable row 1 "X=")
  49.                      (setq row (1+ row))
  50.                   )
  51.                   ;Add Anchor Wire End Easting values to table
  52.                   (setq row 2)
  53.                   (foreach item anchor_east
  54.                      (vla-settext objtable row 2 (rtos item 2 0))
  55.                      (setq row (1+ row))
  56.                   )
  57.                   ;Add X= Labels to table
  58.                   (setq row 2)
  59.                   (while (< row (+ (length lbl_names) 2))
  60.                      (vla-settext objtable row 3 "Y=")
  61.                      (setq row (1+ row))
  62.                   )
  63.                   ;Add Anchor Wire End Northing values to table
  64.                   (setq row 2)
  65.                   (foreach item anchor_north
  66.                      (vla-settext objtable row 4 (rtos item 2 0))
  67.                      (setq row (1+ row))
  68.                   )
  69.                   ;Add Anchor Wire Angle values to table
  70.                   (setvar "DIMZIN"
  71.                   (setq row 2)
  72.                   (foreach item (eval (read (strcat "anchor_angles" (itoa num))))
  73.                      (vla-settext objtable row 5 (strcat (rtos item 2 1) "%%D"))
  74.                      (setq row (1+ row))
  75.                   )
  76.                   (setvar "DIMZIN" 1)
  77.                   ;Add Anchor Wire Distance values to table
  78.                   (setq row 2)
  79.                   (foreach item (eval (read (strcat "anchor_distance" (itoa num))))
  80.                      (vla-settext objtable row 6 (rtos item 2 0))
  81.                      (setq row (1+ row))
  82.                   )
  83.                   ;Add Anchor Wire Midline Buoy 1 values to table
  84.                   (setq row 2)
  85.                   (foreach item anchor_buoy1
  86.                      (if (= item nil)
  87.                         (vla-settext objtable row 7 "")
  88.                      )
  89.                      (if (/= item nil)
  90.                         (vla-settext objtable row 7 item)
  91.                      )
  92.                      (setq row (1+ row))
  93.                   )
  94.                   ;Add Anchor Wire Midline Buoy 2 values to table
  95.                   (setq row 2)
  96.                   (foreach item anchor_buoy2
  97.                      (if (= item nil)
  98.                         (vla-settext objtable row 8 "")
  99.                      )
  100.                      (if (/= item nil)
  101.                         (vla-settext objtable row 8 item)
  102.                      )
  103.                      (setq row (1+ row))
  104.                   )
  105.                   ;Add Anchor Wire Midline Buoy 3 values to table
  106.                   (setq row 2)
  107.                   (foreach item anchor_buoy3
  108.                      (if (= item nil)
  109.                         (vla-settext objtable row 9 "")
  110.                      )
  111.                      (if (/= item nil)
  112.                         (vla-settext objtable row 9 item)
  113.                      )
  114.                      (setq row (1+ row))
  115.                   )
  116.                )
  117.             )
  118.             (setq num (1+ num))
  119.          )
  120.       )
  121.    )
  122. )

 
然后在主程序中,您将看到以下内容:
  1. (initget "1 2 Both")
  2. (setq choice (getkword "\nTable for position [1/2/Both] <Both>: "))
  3. (cond
  4.    (   (= "1" choice) (createtables '((312.0 289.0  )) 1))
  5.    (   (= "2" choice) (createtables '((312.0 227.828)) 2))
  6.    (   (createtables '((312.0 289.0)  (312.0 227.828)) 1))
  7. )
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 21:02:14 | 显示全部楼层
这正是我一段时间后想到的李!正常运转
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 01:22 , Processed in 0.350271 second(s), 64 queries .

© 2020-2025 乐筑天下

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