找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2016|回复: 3

[他山之石] Entmake field

[复制链接]
发表于 2013-8-21 20:22:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. (defun AddObjectField
  2.        (AddToEname objPropList / EntData ExDict FDict cnt str len)
  3.   ;; AddToEname = value ename that the field(s) will be added to.
  4.   ;; objPropList = list of lists, that have a valid vla object and property,
  5.   ;;   ie: ((#<VLA-OBJECT IAcadText 0ee928cc> . "TextString") (#<VLA-OBJECT IAcadText 0ee92764> . "TextString"))
  6.   (if
  7.     (and
  8.       (setq EntData (entget AddToEname))
  9.       (vl-position
  10. (value 0 EntData)
  11. '("TEXT" "MTEXT" "ATTRIB" "ATTDEF")
  12.       )
  13.       (setq ExDict
  14.       (vlax-vla-object->ename
  15.         (vla-GetExtensionDictionary
  16.    (vlax-ename->vla-object AddToEname)
  17.         )
  18.       )
  19.       )
  20.       (setq cnt -1)
  21.       (setq str "")
  22.       (setq len (length objPropList))
  23.     )
  24.      (progn
  25.        (dictremove ExDict "ACAD_FIELD")
  26.        (setq FDict
  27.        (dictadd ExDict
  28.          "ACAD_FIELD"
  29.          (entmakex
  30.     '(
  31.       (0 . "DICTIONARY")
  32.       (100 . "AcDbDictionary")
  33.       (280 . 1)
  34.       (281 . 1)
  35.      )
  36.          )
  37.        )
  38.        )
  39.        (dictadd
  40.   FDict
  41.   "TEXT"
  42.   (entmakex
  43.     (append
  44.       (list
  45.         '(0 . "FIELD")
  46.         '(100 . "AcDbField")
  47.         '(1 . "_text")
  48.         (cons 2
  49.        (repeat len
  50.          (setq str (strcat str
  51.       "%<\\_FldIdx "
  52.       (itoa (setq cnt (1+ cnt)))
  53.       ">%"
  54.       (if (equal (1+ cnt) len)
  55.         ""
  56.         " "
  57.       )
  58.      )
  59.          )
  60.        )
  61.         )
  62.         ;;'(2 . "%<\\_FldIdx 0>%")
  63.         (cons 90 (length objPropList)) ;Number of child fields
  64.       )
  65.       (mapcar
  66.         (function
  67.    (lambda (x / LinkObj PropName PropType PropValue)
  68.      (setq LinkObj (car x))
  69.      (setq PropName (cdr x))
  70.      (setq PropType
  71.      (type
  72.        (setq PropValue
  73.        (vlax-get LinkObj PropName)
  74.        )
  75.      )
  76.      )
  77.      (cons 360 ;_Child field ID
  78.     (entmakex
  79.       (list
  80.         '(0 . "FIELD")
  81.         '(100 . "AcDbField")
  82.         '(1 . "AcObjProp") ;_ Field type
  83.         (cons
  84.           2
  85.           (strcat
  86.      "\\AcObjProp Object(%<\\_ObjIdx 0>%)."
  87.      PropName
  88.           )
  89.         )
  90.         '(90 . 0) ;_ Number of child fields
  91.         '(97 . 1) ;_ Number of object ids
  92.         (cons 331 (vlax-vla-object->ename LinkObj))
  93. ;_ Object id
  94.         '(4 . "") ;_ format string
  95.         '(91 . 63) ;_ evaluation option
  96.         '(92 . 0) ;_ filling option
  97.      ;'(94 . 59) ; field state flag
  98.      ;'(95 . 2) ; evaluation status
  99.      ;'(96 . 0) ; evaluation error code
  100.      ;'(300 . "") ; evaluation error message
  101.         '(6 . "ObjectPropertyId")
  102.         '(90 . 64)
  103.         (cons 330 (vlax-vla-object->ename LinkObj))
  104.         '(6 . "ObjectPropertyName")
  105.      ; key string for the field data
  106.         '(90 . 4) ; data type of field
  107.         (cons 1 PropName) ; name of property
  108.         '(7 . "ACAD_FIELD_VALUE")
  109.      ; key string for the evaluated cache
  110.         (cons
  111.           90 ;data type of field
  112.           (cond
  113.      ((equal PropType 'STR)
  114.       4
  115.      )
  116.      ((equal PropType 'INT)
  117.       1
  118.      )
  119.      ((equal PropType 'REAL)
  120.       2
  121.      )
  122.      ((equal PropType 'LIST)
  123.       32
  124.      )
  125.           )
  126.         )
  127.         (cond ; field value
  128.           ((equal PropType 'STR)
  129.     (cons 1 PropValue)
  130.           )
  131.           ((equal PropType 'INT)
  132.     (cons 91 PropValue)
  133.           )
  134.           ((equal PropType 'REAL)
  135.     (cons 140 PropValue)
  136.           )
  137.           ((equal PropType 'LIST)
  138.     (cons 11 Propvalue)
  139.           )
  140.         )
  141.         '(300 . "") ; format string for '08
  142.         '(301 . "") ; format string
  143.         '(98 . 0) ; length of format string
  144.       )
  145.     )
  146.      )
  147.    )
  148.         )
  149.         objPropList
  150.       )
  151.       (list
  152.         '(97 . 0)  ; Number of object IDs used in the field code
  153.         '(4 . "")  ; Format string
  154.         '(91 . 63)  ; Evaluation option
  155.      ;kDisable 0 Disable evaluation.
  156.      ;kOnOpen (0x1 << 0) Evaluate during drawing load.
  157.      ;kOnSave (0x1 << 1) Evaluate during drawing save.
  158.      ;kOnPlot (0x1 << 2) Evaluate during drawing plot.
  159.      ;kOnEtransmit (0x1 << 3) Evaluate during eTransmit.
  160.      ;kOnRegen (0x1 << 4) Evaluate during regen.
  161.      ;kOnDemand (0x1 << 5) Evaluate only on demand by the user or the API.
  162.      ;kAutomatic (kOnOpen | kOnSave | kOnPlot | kOnEtransmit | kOnRegen | kOnDemand) Automatically evaluate fields during all the operations.
  163.         '(92 . 0)  ;Filling option
  164.      ;kSkipFilingResult (0x1 << 0) Do not file out the cached evaluation result with the field.
  165.      ;'(94 . 5) ;Field state flag
  166.      ;kInitialized (0x1 << 0) Field is not yet intitalized with any field code or data.
  167.      ;kCompiled (0x1 << 1) Field has been compiled.
  168.      ;kModified (0x1 << 2) Field has been modified and not yet evaluated.
  169.      ;kEvaluated (0x1 << 3) Field has been evaluated. Use evaluationStatus() to get the evaluation status.
  170.      ;kHasCache (0x1 << 4) The field has a cache of the evaluated result.
  171.      ;'(95 . 1) ;Evaluation status
  172.      ;kNotYetEvaluated (0x1 << 0) Field is not yet evaluated.
  173.      ;kSuccess (0x1 << 1) Field is evaluated successfully.
  174.      ;kEvaluatorNotFound (0x1 << 2) Evaluator was not found.
  175.      ;kSyntaxError (0x1 << 3) Syntax error in the field expression.
  176.      ;kInvalidCode (0x1 << 4) Invalid field code or expression.
  177.      ;kInvalidContext (0x1 << 5) Current context is invalid for evaluating the field.
  178.      ;kOtherError (0x1 << 6) Evaluation has failed.
  179.      ;'(96 . 0) ;Evaluation error code
  180.      ;'(300 . "") ;Evaluation error message
  181.         '(93 . 1)  ;Number of the data set in the field
  182.         '(6 . "ACFD_FIELDTEXT_CHECKSUM")
  183.      ;Key string for field data
  184.         '(90 . 2)  ;Data type of field value
  185.         '(140 . 33.0)  ;Double value
  186.         '(7 . "ACFD_FIELD_VALUE");Key string from the evaluated cache, hard coded as is shown here
  187.         '(90 . 0)  ;Data type of field value
  188.         '(91 . 0)  ;Long value
  189.         '(301 . "")  ; format string
  190.         '(98 . 0)  ; format string length
  191.               )
  192.     )
  193.   )
  194.        )
  195.        (entupd AddToEname)
  196.      )
  197.   )
  198. )

Example

  1. (lambda ( a b )
  2.         (AddObjectField a (list (cons b "ObjectName") (cons b "Layer")))
  3.     )
  4.     (car (nentsel "\n Select entity to assign field to: "))
  5.     (vlax-ename->vla-object (car (nentsel)))
  6. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-21 22:19:59 | 显示全部楼层
很少用这个FIELD啊,楼主给大家普及普及什么是field和有什么好处吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-21 22:18:44 | 显示全部楼层
这百度收录也太快了吧,刚查看FIELD的信息,百度就在首页前几条有这个帖子了。


QQ截图20130821221614.png


点评

搜这些V/Alisp一般用 Google,不用 Baidu  详情 回复 发表于 2013-8-22 06:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-22 06:20:39 | 显示全部楼层
newer 发表于 2013-8-21 22:18
这百度收录也太快了吧,刚查看FIELD的信息,百度就在首页前几条有这个帖子了。

搜这些V/Alisp一般用 Google,不用 Baidu
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 01:10 , Processed in 0.442978 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表