乐筑天下

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

[编程交流] 如何在ta中选择单元格

[复制链接]

55

主题

133

帖子

78

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 08:42:27 | 显示全部楼层 |阅读模式
尊敬的各位:,
 
请举例说明如何选择autoCAD表格中的某些单元格,它应该返回行和列索引。
 
如何在lisp中应用以下功能?
 
vla选择子区域
vla选择
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:49:14 | 显示全部楼层
这个帖子可能对你有帮助。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:52:31 | 显示全部楼层
要通过屏幕上的选择获取单元格上具有现有值的表的行数和列数,请执行以下操作:
 
尝试HitTest
  1. (defun c:test (/ a b c)
  2. (setq a (entsel)
  3.      b (vlax-ename->vla-object (car a)))
  4. (vla-HitTest
  5.   b
  6.   (vlax-3d-point (cadr a))
  7.   (vlax-3d-point (trans (getvar 'ViewDir) 1 0))
  8.   'Rw
  9.   'Cl
  10. )
  11. (print rw)
  12. (print cl)
  13. ;;;; (do your thing here...) ;;;;
  14.    (princ)
  15. )

 
否则使用Lee的代码
回复

使用道具 举报

55

主题

133

帖子

78

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 08:56:41 | 显示全部楼层
尊敬的李:,
 
我已通过以下代码达到我的要求。但我只想突出显示用户选择的单元格。方法(Vla高亮)是高亮度照明整个桌子。请推荐我。
 
  1. ;*******************************************************************************************
  2. ;*******************************************************************************************
  3. ;*******************************************************************************************
  4. (defun C:adt (/ *number* *pt1* *pt2* atable sset)
  5. (Setq *pt1* (getpoint "\nPick First Corner in a table")
  6.        *pt2* (getcorner *pt1* "\nPick other corner in same table")
  7. )
  8. (setq sset (Ssget "C" *pt1* *pt2* '((0 . "ACAD_TABLE"))))
  9. (if (and sset (= (sslength sset) 1))
  10.    (progn (setq *number* (getreal "\nNumber to be added : "))
  11.           (Setq atable (vlax-ename->vla-object (ssname sset 0)))
  12.           (update_selected_cells atable)
  13.    )
  14.    (Alert "Please select Inside of single table")
  15. )
  16. (princ)
  17. )
  18. ;*******************************************************************************************
  19. ;*******************************************************************************************
  20. ;*******************************************************************************************
  21. (defun check_falling (pt corner_pt1 corner_pt2 / result x1 x2 y1 y2)
  22. (setq x1 (min (Car corner_pt1) (Car corner_pt2))
  23.        x2 (max (Car corner_pt1) (Car corner_pt2))
  24.        y1 (min (Cadr corner_pt1) (Cadr corner_pt2))
  25.        y2 (max (Cadr corner_pt1) (Cadr corner_pt2))
  26. )
  27. (if (and (> (Car pt) x1)
  28.           (< (Car pt) x2)
  29.           (> (Cadr pt) y1)
  30.           (< (Cadr pt) y2)
  31.      )
  32.    (setq result t)
  33.    (setq result nil)
  34. )
  35. result
  36. )
  37. ;*******************************************************************************************
  38. ;*******************************************************************************************
  39. ;*******************************************************************************************
  40. (defun update_selected_cells (atable      /           #i          #list       column_no
  41.                              dum_pt1     dum_pt2     dum_pt3     dum_pt4     i
  42.                              list_of_cells           new_str     no_of_columns
  43.                              no_of_rows  old_str     return_list row_no      sset
  44.                              text        x
  45.                             )
  46. (setq no_of_rows    (vla-get-rows atable)
  47.        no_of_columns (vla-get-columns atable)
  48.        row_no        0
  49. )
  50. (repeat no_of_rows
  51.    (Setq column_no 0)
  52.    (repeat no_of_columns
  53.      (Setq return_list (vlax-safearray->list
  54.                          (vlax-variant-value (vla-GetCellExtents atable row_no column_no t))
  55.                        )
  56.      )
  57.      (Setq dum_pt1 (extract_list 0 2 return_list)
  58.            dum_pt2 (extract_list 3 5 return_list)
  59.            dum_pt3 (extract_list 6 8 return_list)
  60.            dum_pt4 (extract_list 9 11 return_list)
  61.      )
  62.      (if (or (check_falling dum_pt1 *pt1* *pt2*)
  63.              (check_falling dum_pt2 *pt1* *pt2*)
  64.              (check_falling dum_pt3 *pt1* *pt2*)
  65.              (check_falling dum_pt4 *pt1* *pt2*)
  66.          )
  67.        (setq list_of_cells (append list_of_cells (list (list row_no column_no))))
  68.      )
  69.      (Setq column_no (1+ column_no))
  70.    )
  71.    (Setq row_no (1+ row_no))
  72. )
  73. (mapcar '(lambda (x)
  74.             (Setq text (vla-gettext atable (Car x) (cadr x)))
  75.             (Setq #list (reverse (vl-string->list text)))
  76.             (if #list
  77.               (progn (setq i 0)
  78.                      (while (or (and (>= (nth i #list) 48) (<= (nth i #list) 57))
  79.                                 (= (nth i #list) 46)
  80.                             )
  81.                        (Setq i (1+ i))
  82.                      )
  83.                      (if (> i 0)
  84.                        (progn (Setq old_str (substr text 1 (- (strlen text) i)))
  85.                               (setq new_str
  86.                                      (Strcat old_str
  87.                                              (rtos (+ (atof (substr text (- (strlen text) (1- i)) (strlen text)))
  88.                                                       *number*
  89.                                                    )
  90.                                                    2
  91.                                                    0
  92.                                              )
  93.                                      )
  94.                               )
  95.                               (vla-settext atable (Car x) (cadr x) new_str)
  96.                        )
  97.                      )
  98.               )
  99.             )
  100.           )
  101.          list_of_cells
  102. )
  103. )
  104. ;*******************************************************************************************
  105. ;*******************************************************************************************
  106. ;*******************************************************************************************
  107. (defun extract_list (#start #end #List / #Index cnt)
  108. (setq cnt -1)
  109. (vl-remove-if '(lambda (x) (setq cnt (1+ cnt)) (or (< cnt #start) (> cnt #end)))
  110.                #List
  111. )
  112. )
  113. ;*******************************************************************************************
  114. ;*******************************************************************************************
  115. ;*******************************************************************************************
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:01:23 | 显示全部楼层
快速示例:
 
  1. (defun c:test ( / _ss->lst _hit-test acapp acdoc l1 l2 p1 p2 pt ss )
  2.    ;; Example by Lee Mac 2011  -  www.lee-mac.com
  3.    (defun _ss->lst ( ss / i lst )
  4.        (repeat (setq i (sslength ss))
  5.            (setq lst (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) lst))
  6.        )
  7.    )
  8.    (defun _hit-test ( pt lst )
  9.        (vl-some
  10.            (function
  11.                (lambda ( obj / row col )
  12.                    (if
  13.                        (eq :vlax-true
  14.                            (vla-hittest obj (vlax-3D-point (trans pt 1 0))
  15.                                (vlax-3D-point (trans (getvar 'VIEWDIR) 1 0)) 'row 'col
  16.                            )
  17.                        )
  18.                        (list obj row col)
  19.                    )
  20.                )
  21.            )
  22.            lst
  23.        )
  24.    )
  25.    (setq acapp (vlax-get-acad-object)
  26.          acdoc (vla-get-activedocument acapp)
  27.    )
  28.    (if (setq ss (ssget "_X" (list (cons 0 "ACAD_TABLE") (cons 410 (getvar 'CTAB)))))
  29.        (progn
  30.            (setq ss (_ss->lst ss))
  31.            (while
  32.                (and
  33.                    (setq p1 (getpoint "\nSpecify First Corner: "))
  34.                    (not (setq l1 (_hit-test p1 ss)))
  35.                )
  36.                (princ "\nPoint does not lie in Table Cell.")
  37.            )
  38.            (if p1
  39.                (progn
  40.                    (while
  41.                        (and
  42.                            (setq p2 (getcorner p1 "\nSpecify Opposite Corner: "))
  43.                            (not (setq l2 (_hit-test p2 (list (car l1)))))
  44.                        )
  45.                        (princ "\nPoint not valid.")
  46.                    )
  47.                    (if p2
  48.                        (vla-setsubselection (car l1) (cadr l1) (cadr l2) (caddr l1) (caddr l2))
  49.                    )
  50.                )
  51.            )
  52.        )
  53.        (princ "\nNo Tables found in drawing.")
  54.    )
  55.    (princ)
  56. )
  57. (vl-load-com) (princ)
回复

使用道具 举报

24

主题

141

帖子

115

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2022-7-6 09:08:00 | 显示全部楼层
对不起,李先生
回复

使用道具 举报

55

主题

133

帖子

78

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 09:13:18 | 显示全部楼层
094233mx7uu7bh777uzqal.jpg
尊敬的李先生:,
请参阅附件以供参考。
 
我们需要通过提供两个点(两个角点)来突出显示选定的单元格。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:18:41 | 显示全部楼层
你试过密码吗?!?
回复

使用道具 举报

55

主题

133

帖子

78

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 09:23:29 | 显示全部楼层
对但它并没有突出显示细胞。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:24:29 | 显示全部楼层
 
那么你收到了什么消息?如果有的话?程序是否出错?
 
以下是我的系统上的结果:
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 09:15 , Processed in 0.948153 second(s), 74 queries .

© 2020-2025 乐筑天下

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