乐筑天下

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

[编程交流] 字段编辑或字段输入自动

[复制链接]

2

主题

10

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:29:37 | 显示全部楼层 |阅读模式
我有几个带有字段的长表,我想自动输入这些字段的数据,这样我就不必每次都选择字段类型/属性/格式。
 
有谁能帮助我使用命令/lisp例程“编辑字段”(表中的重复字段)并将所述字段更改为:
 
(1) 物体测量数据*
或(2)对象区域数据*
 
只需选择对象并绕过类型、属性、格式等的选择。
 
(*=实际上可能需要两个不同的例程)
 
或者,一个更简单的命令/lisp例程将在图形上插入一个包含上述数据(测量值/面积)的字段,然后我可以将其复制并粘贴到表格单元格中。
 
非常感谢!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:39:03 | 显示全部楼层
此线程可能会有所帮助
 
http://www.cadtutor.net/forum/showthread.php?t=38009
 
如果你在那里找不到你想要的东西,我很乐意帮助更多人
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:43:13 | 显示全部楼层
试试这个:
 
  1. ;; Put Field in Cell, by Lee McDonnell 11.07.2009
  2. (defun c:putfld (/ *error* doc spc chx ent Obj tStr flag
  3.                   grdat gr dat osPt tss lst row col)
  4. (vl-load-com)
  5. (defun *error* (msg)
  6.    (and tObj
  7.      (not
  8.        (vlax-erased-p tObj))
  9.          (vla-delete tObj))
  10.    (if (not
  11.          (wcmatch
  12.            (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
  13.      (princ
  14.        (strcat
  15.          "\n<< Error: " msg " >>"))
  16.      (princ "\n*Cancel*"))
  17.    (princ))
  18. (setq doc (vla-get-ActiveDocument
  19.              (vlax-get-Acad-Object))
  20.        spc (if
  21.              (zerop
  22.                (vla-get-activespace doc))
  23.              (if (= (vla-get-mspace doc) :vlax-true)
  24.                (vla-get-modelspace doc) ; Vport
  25.                (vla-get-paperspace doc))
  26.              (vla-get-modelspace doc)))
  27. (or *mac (setq *mac "Select"))
  28. (while
  29.    (progn
  30.      (initget "Select Polyline Quit")
  31.      (setq chx
  32.        (getkword
  33.          (strcat "\nSelect Object or Draw Polyline [sel/Poly/Quit] <" *mac "> : ")))
  34.      (or (not chx) (setq *mac chx))
  35.      
  36.      (setq flag nil)
  37.      (cond
  38.        ((eq "Quit" chx) nil)
  39.        (t
  40.         (cond
  41.           ((eq "Select" *mac)
  42.            (while
  43.              (progn
  44.                (setq ent (car (entsel "\nSelect Object: ")))
  45.                (cond
  46.                  ((eq 'ENAME (type ent))
  47.                   (if
  48.                     (not
  49.                       (and
  50.                         (vlax-property-available-p
  51.                           (setq Obj
  52.                             (vlax-ename->vla-object ent)) 'Area)
  53.                         (vlax-property-available-p Obj 'Length)))
  54.                     (princ "\n** Invalid Object Selected **")))
  55.                  (t (princ "\n** Nothing Selected **"))))))           
  56.           ((eq "Polyline" *mac)
  57.            (command "_.pline")
  58.            (while
  59.              (eq 1
  60.                (logand 1
  61.                  (getvar 'CMDACTIVE)))
  62.              (command pause))
  63.            (setq Obj
  64.              (vlax-ename->vla-object
  65.                (entlast)))))
  66.         (if Obj
  67.           (progn
  68.             (repeat 2
  69.               (setq tStr
  70.                 (strcat
  71.                   "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
  72.                     (vl-princ-to-string
  73.                       (vla-get-Objectid Obj)) ">%)."
  74.                   (if flag "Length" "Area")
  75.                   " \\f "%lu2%pr2">%"))
  76.                 (setq tObj
  77.                   (vla-addMText spc
  78.                     (vlax-3D-point '(0 0 0)) 0 tStr))
  79.               (vla-put-visible tObj :vlax-false)
  80.               (princ
  81.                 (strcat
  82.                   "\nPlace " (if flag "Length" "Area") " Field..."))
  83.               (while
  84.                 (progn
  85.                   (setq grdat (grread t 15 0)
  86.                         gr (car grdat) dat (cadr grdat))
  87.                   (cond
  88.                     ((and (eq 5 gr) (listp dat))
  89.                      (redraw)
  90.                      (vla-put-visible tObj :vlax-true)
  91.                      
  92.                      (vla-move tObj
  93.                        (vla-get-InsertionPoint tObj)
  94.                          (vlax-3D-point dat))
  95.                      t)
  96.                     ((eq 2 gr)
  97.                      (cond
  98.                        ((vl-position dat '(32 13))
  99.                        nil)
  100.                        
  101.                        (t t)))            
  102.                     ((eq 25 gr)
  103.                      (and tObj
  104.                           (not
  105.                             (vlax-erased-p tObj))
  106.                               (vla-delete tObj))
  107.                      nil)
  108.                     ((eq 3 gr)
  109.                      (if
  110.                        (and
  111.                          (setq tss
  112.                            (ssget "_X" '((0 . "ACAD_TABLE"))))
  113.                          (setq lst (car
  114.                            (vl-remove-if 'null
  115.                              (mapcar
  116.                                (function
  117.                                  (lambda (tab)
  118.                                    (if
  119.                                      (eq :vlax-true
  120.                                        (vla-HitTest tab
  121.                                          (vlax-3D-point
  122.                                            (trans dat 1 0))
  123.                                              (vlax-3D-point
  124.                                                (trans
  125.                                                  (getvar 'VIEWDIR) 1 0)) 'row 'col))
  126.                                      (list tab row col))))
  127.                                (mapcar 'vlax-ename->vla-object
  128.                                  (mapcar 'cadr (ssnamex tss))))))))
  129.                        (and
  130.                          (not            
  131.                            (apply 'vla-SetText
  132.                              (append lst (list tStr)))) tObj
  133.                            (not (vlax-erased-p tObj))
  134.                          (vla-delete tObj)))
  135.                      nil)
  136.                     (t t))))
  137.               (setq flag T))))))))
  138. (princ))
回复

使用道具 举报

2

主题

10

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:51:50 | 显示全部楼层
谢谢,除了属性“测量”之外,这似乎有效。如何将其添加到例程中?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:55:49 | 显示全部楼层
 
“测量”?至于尺寸?
 
你还需要周长吗?
回复

使用道具 举报

2

主题

10

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:00:42 | 显示全部楼层
我不需要长度/周长。“面积”字段与工作正常的物理对象相关,但在选择与对象相关的维度时,我需要一个“测量”字段。
 
我的表格基本上包括显示面积是如何计算的,因此我需要将尺寸输入(链接)表格的“等式侧”,将面积输入“总侧”。
回复

使用道具 举报

2

主题

10

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:10:45 | 显示全部楼层
我认为面积数字必须准确,但相反,它们必须与计算完全匹配(精度合理)。在这方面,我实际上必须让Autocad计算公式,并且只输入与测量值连接的字段。见附表示例。
 
我喜欢这个例程的工作方式,你能通过询问“测量”属性来帮助简化例程吗?换句话说,选择维度,放置在表/单元格中?
 
顺便说一句,我自己也试着改变程序,但我不断得到无效的对象或错误。。。
072942zffqpff4oiijt92n.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:17:23 | 显示全部楼层
试试这个:
 
  1. (defun c:dval (/ COL ENT I LST OBJ OBJLST PT ROW SS)
  2. ;; Place Dimension Value in Cell  ~  Lee Mac 03.01.10
  3. (vl-load-com)
  4. (if (setq i -1 ss (ssget "_X" '((0 . "ACAD_TABLE"))))
  5.    (progn
  6.      
  7.      (while (setq ent (ssname ss (setq i (1+ i))))
  8.        (setq objLst (cons (vlax-ename->vla-object ent) objLst)))
  9.      (while
  10.        (progn
  11.          (setq ent (car (entsel "\nSelect Dimension or Text <Exit> : ")))
  12.          (cond (  (eq 'ENAME (type ent))
  13.                   (if (not
  14.                         (wcmatch
  15.                           (vla-get-ObjectName
  16.                             (setq obj (vlax-ename->vla-object ent))) "*Dimension,*Text"))
  17.                     
  18.                     (princ "\n** Object Must be a Dimension or Text **")
  19.                     (while
  20.                       (progn
  21.                         (setq pt (getpoint "\nPick inside Cell to Place Text: "))
  22.                         (cond (  (not pt))
  23.                               (  (setq lst
  24.                                    (car
  25.                                      (vl-remove-if (function null)
  26.                                        (mapcar
  27.                                          (function
  28.                                            (lambda (table)
  29.                                              (if (eq :vlax-true
  30.                                                      (vla-HitTest table
  31.                                                        (vlax-3D-point (trans pt 1 0))
  32.                                                          (vlax-3D-point
  33.                                                            (trans
  34.                                                              (getvar 'VIEWDIR) 1 0)) 'row 'col))
  35.                                                (list table row col))))
  36.                                          ObjLst))))
  37.                               
  38.                                  (apply
  39.                                    (function vla-SetText)
  40.                                      (append lst
  41.                                        (list
  42.                                          (cond (  (wcmatch (vla-get-Objectname obj) "*Dimension")
  43.                                                 
  44.                                                   (strcat
  45.                                                     (vla-get-TextPrefix obj)
  46.                                                     (rtos (vla-get-Measurement obj)
  47.                                                           (vla-get-UnitsFormat obj)
  48.                                                           (vla-get-PrimaryUnitsPrecision obj))
  49.                                                     (vla-get-TextSuffix obj)))
  50.                                                (  (vla-get-TextString obj)))))) nil)
  51.                               (t (princ "\n** Point must be inside Cell **")))))) t)))))
  52.    
  53.    (princ "\n** No Tables Found in Drawing **"))
  54. (princ))
回复

使用道具 举报

2

主题

10

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:18:08 | 显示全部楼层
这真的不起作用。出于某种原因,它插入了维度值,后跟“\ X”。
无论如何,输入值是文本,并且确实需要是一个字段,就像您之前的区域、长度字段例程一样。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:29:24 | 显示全部楼层
嗨,卡普,
 
终于有机会看到这个了,试一试:
 
  1. (defun c:Dim2Cell (/ *error*
  2.                     CODE COL DATA ENT GR I LST OBJ
  3.                     ROW SPC TLST TOBJ TSS TSTR UFLAG)
  4. (vl-load-com)
  5. ;; Lee Mac  ~  17.02.10
  6. (defun *error* (msg)
  7.    (and uFlag (vla-EndUndoMark *doc))   
  8.    (and tObj (not (vlax-erased-p tObj))
  9.         (vla-delete tObj))
  10.    
  11.    (or (not msg)
  12.        (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  13.        (princ (strcat "\n** Error: " msg " **")))
  14.    
  15.    (princ))
  16. (setq *doc (cond (*doc) ((vla-get-ActiveDocument
  17.                             (vlax-get-acad-object))))
  18.       
  19.        spc  (if (zerop (vla-get-activespace *doc))
  20.               (if (= (vla-get-mspace *doc) :vlax-true)
  21.                 (vla-get-modelspace *doc)
  22.                 (vla-get-paperspace *doc))
  23.               (vla-get-modelspace *doc)))
  24. (if (setq i -1 tss (ssget "_X" '((0 . "ACAD_TABLE"))))
  25.    (while (setq ent (ssname tss (setq i (1+ i))))
  26.      (setq tLst (cons (vlax-ename->vla-object ent) tLst))))
  27. (while
  28.    (progn
  29.      (setq ent (car (entsel "\nSelect Dimension to Retrieve Measurement: ")))
  30.      (cond (  (eq 'ENAME (type ent))
  31.               (if (vlax-property-available-p
  32.                     (setq obj (vlax-ename->vla-object ent)) 'Measurement)
  33.                 (progn                  
  34.                   (setq uFlag (not (vla-StartUndoMark *doc)))
  35.                   (setq tStr (strcat "%<\\AcObjProp Object(%<\\_ObjId "
  36.                                      (itoa (vla-get-ObjectId Obj))
  37.                                      ">%).Measurement \\f "%lu6">%"))
  38.                   (vla-put-AttachmentPoint
  39.                     (setq tObj (vla-AddMText spc
  40.                                  (vlax-3D-point '(0 0 0)) 0 tStr))
  41.                     acAttachmentPointMiddleCenter)
  42.                   (while
  43.                     (progn
  44.                       (setq gr (grread 't 13 0) code (car gr) data (cadr gr))
  45.                       (cond (  (and (= 5 code) (listp data))
  46.                              
  47.                                (vla-put-InsertionPoint tObj (vlax-3D-point data))
  48.                              
  49.                              t)
  50.                             (  (= 25 code)
  51.                                (and tObj (not (vlax-erased-p tObj))
  52.                                          (vla-delete tObj))
  53.                              nil)
  54.                             (  (and (= 3 code) (listp data))
  55.                                (cond (  (setq lst
  56.                                           (car
  57.                                             (vl-remove-if 'null
  58.                                               (mapcar
  59.                                                 (function
  60.                                                   (lambda (table)
  61.                                                     (if (eq :vlax-true
  62.                                                             (vla-hittest table
  63.                                                               (vlax-3D-point
  64.                                                                 (trans data 1 0))
  65.                                                               (vlax-3D-point
  66.                                                                 (trans
  67.                                                                   (getvar 'VIEWDIR) 1 0))
  68.                                                               'row 'col))
  69.                                                       (list table row col))))
  70.                                                 tLst))))
  71.                                         (apply (function vla-SetText)
  72.                                                (append lst (list tStr)))
  73.                                         (and tObj (not (vlax-erased-p tObj))
  74.                                                   (vla-delete tObj))))
  75.                              nil)
  76.                             (t ))))
  77.                   (setq uFlag (vla-EndUndoMark *doc)))
  78.                 (princ "\n** Object Does not Have Measurement Property **"))))))
  79. (princ))
  80.                                       

 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 15:48 , Processed in 0.673260 second(s), 74 queries .

© 2020-2025 乐筑天下

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