明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1968|回复: 13

字典操作

[复制链接]
发表于 2025-6-1 14:28:29 | 显示全部楼层 |阅读模式
本帖最后由 dcl1214 于 2025-6-1 14:30 编辑

字典操作,一起测试
感谢石总帮助
  1. (defun $zi-dian-xie-ru$
  2.                         (ent          name           values   lst             /
  3.                          _setxrecord           alls            dict     dicts
  4.                          list->vbarray           news            obj             obj0
  5.                          olds          xd           xlst            xrec     xt
  6.                         )
  7.                                         ;字典写入
  8.                                         ;($zi-dian-xie-ru$(CAR (entsel))  "ZXCAD" '((1000 . "HELLO WORLD") (1070 . 1) (1040 . 1.0))nil)
  9.   (defun _setxrecord (obj lst)
  10.     (vla-setxrecorddata
  11.       obj
  12.       (list->vbarray (mapcar 'car lst) vlax-vbinteger)
  13.       (list->vbarray (mapcar 'cdr lst) vlax-vbvariant)
  14.     )
  15.   )
  16.   (defun list->vbarray (ptsList TYPE1 / arraySpace sArray)
  17.     (setq arraySpace
  18.            (vlax-make-safearray
  19.              TYPE1
  20.              (cons 0 (- (length ptsList) 1))
  21.            )
  22.     )
  23.     (setq sArray (vlax-safearray-fill arraySpace ptsList))
  24.     (vlax-make-variant sArray)
  25.   )
  26.   (if (and ent (= (type ent)) 'ename)
  27.     (setq obj0 (vlax-ename->vla-object ent))
  28.   )
  29.   (and obj0 (setq obj (VLA-GetExtensionDictionary obj0)))
  30.   (if (= (vla-get-objectname obj) "AcDbDictionary")
  31.     (progn
  32.       (vlax-for        d obj
  33.         (if (and (= (vla-get-objectname d) "AcDbXrecord")
  34.                  (= (strcase (vla-get-name d)) (strcase name))
  35.             )
  36.           (setq xrec d)
  37.         )
  38.       )
  39.       (if xrec
  40.         (progn
  41.           (vla-getxrecorddata xrec 'xt 'xd)
  42.           (if xt
  43.             (progn
  44.               (setq olds
  45.                      (mapcar 'cons
  46.                              (safearray-value xt)
  47.                              (mapcar 'variant-value (safearray-value xd))
  48.                      )
  49.               )
  50.               (setq
  51.                 alls (vl-remove nil (append olds values))
  52.               )
  53.               (cond
  54.                 ((vl-position (cdr (assoc "模式" lst)) (list "追加"))
  55.                  (setq news alls)
  56.                 )
  57.                 (t (setq news values))
  58.               )
  59.               (_setxrecord xrec news)
  60.             )
  61.             (_setxrecord xrec values)
  62.           )
  63.         )
  64.         (progn
  65.           (setq xrec (vla-addxrecord obj name))
  66.           (_setxrecord xrec values)
  67.         )
  68.       )
  69.     )
  70.     (if        (= (vla-get-hasExtensionDictionary obj) :vlax-true)
  71.       (progn
  72.         (setq dicts (vla-GetExtensionDictionary obj))
  73.         (vlax-for dict dicts
  74.           (if (and (= (vla-get-objectname dict) "AcDbXrecord")
  75.                    (= (strcase (vla-get-name dict)) (strcase name))
  76.               )
  77.             (setq xrec dict)
  78.           )
  79.         )
  80.         (if xrec
  81.           (progn
  82.             (vla-getxrecorddata xrec 'xt 'xd)
  83.             (_setxrecord
  84.               xrec
  85.               (append
  86.                 (mapcar        'cons
  87.                         (safearray-value xt)
  88.                         (mapcar 'variant-value (safearray-value xd))
  89.                 )
  90.                 values
  91.               )
  92.             )
  93.           )
  94.         )
  95.       )
  96.       (progn
  97.         (setq dict (vla-getextensiondictionary obj)
  98.               xrec (vla-addxrecord dict name)
  99.         )
  100.         (_setxrecord xrec values)
  101.       )
  102.     )
  103.   )
  104.   ($zi-dian-du-qu$ ent "*" nil)
  105. )
  106. (defun $zi-dian-du-qu$
  107.        (ent name lst / _getxrecord dicts e obj obj0 xd xt)
  108.                                         ;字典读取
  109.                                         ;($zi-dian-du-qu$(CAR (entsel))   "*"  nil)
  110.                                         ;($zi-dian-du-qu$(CAR (entsel))   "ZXCAD"  nil)
  111.   (defun _getxrecord (dc / xt xd)
  112.     (if        (= (vla-get-objectname dc) "AcDbXrecord")
  113.       (progn (vla-getxrecorddata dc 'xt 'xd)
  114.              (if (and xt xd)
  115.                (setq lst
  116.                       (cons
  117.                         (cons (vla-get-name dc)
  118.                               (mapcar
  119.                                 'cons
  120.                                 (safearray-value xt)
  121.                                 (mapcar 'variant-value (safearray-value xd))
  122.                               )
  123.                         )
  124.                         lst
  125.                       )
  126.                )
  127.                (setq lst (cons (vla-get-name dc) lst))
  128.              )
  129.       )
  130.     )
  131.   )
  132.   (if (and ent (= (type ent)) 'ename)
  133.     (setq obj0 (vlax-ename->vla-object ent))
  134.   )
  135.   (and obj0 (setq obj (VLA-GetExtensionDictionary obj0)))
  136.   (if (= (vla-get-objectname obj) "AcDbDictionary")
  137.     (vlax-for dict obj (_getxrecord dict))
  138.     (if        (= (vla-get-hasExtensionDictionary obj) :vlax-true)
  139.       (progn (setq dicts (vla-GetExtensionDictionary obj))
  140.              (vlax-for dict dicts (_getxrecord dict))
  141.       )
  142.     )
  143.   )
  144.   (if
  145.     (= name "*")
  146.      lst
  147.      (vl-remove-if-not
  148.        (function (lambda (x) (= (strcase (car x)) (strcase name))))
  149.        lst
  150.      )
  151.   )
  152. )
  153. (defun $zi-dian-shan-chu$
  154.        (ent name vars lst / E1 obj obj0 OLDS SS TF X)
  155.                                         ;字典删除
  156.                                         ;($zi-dian-shan-chu$(CAR (entsel))   "ZXCAD" '((1070 . 1) (1040 . 2.0))  nil)
  157.   (if (and ent (= (type ent)) 'ename)
  158.     (setq obj0 (vlax-ename->vla-object ent))
  159.   )
  160.   (and obj0 (setq obj (VLA-GetExtensionDictionary obj0)))
  161.   (if (setq OLDS ($zi-dian-du-qu$ ent name NIL))
  162.     (progn
  163.       (setq olds (cdr (assoc name OLDS)))
  164.       (COND
  165.         ((AND obj name vars)
  166.          (setq OLDS (vl-remove-if
  167.                       (function (lambda (a) (assoc (car a) vars)))
  168.                       OLDS
  169.                     )
  170.          )
  171.          (if OLDS
  172.            ($zi-dian-xie-ru$ ent name OLDS lst)
  173.          )
  174.         )
  175.         (T
  176.          (if (= (vla-get-objectname obj) "AcDbDictionary")
  177.            (vlax-for d obj
  178.              (if (= (vla-get-objectname d) "AcDbXrecord")
  179.                (if (= name "*")
  180.                  (vla-delete d)
  181.                )
  182.                (if (= (strcase (vla-get-name d)) (strcase name))
  183.                  (vla-delete d)
  184.                )
  185.              )
  186.            )
  187.            (if (vla-get-hasextensiondictionary obj)
  188.              (vlax-for d (vla-getextensiondictionary obj)
  189.                (if (= (vla-get-objectname d) "AcDbXrecord")
  190.                  (if (= name "*")
  191.                    (vla-delete d)
  192.                  )
  193.                  (if (= (strcase (vla-get-name d)) (strcase name))
  194.                    (vla-delete d)
  195.                  )
  196.                )
  197.              )
  198.            )
  199.          )
  200.         )
  201.       )
  202.       (setq OLDS ($zi-dian-du-qu$ ent name NIL))
  203.     )
  204.   )
  205.   OLDS
  206. )


评分

参与人数 2明经币 +2 收起 理由
kucha007 + 1 赞一个!
1028695446 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2025-9-28 22:08:53 | 显示全部楼层
  1. (defun $zi-dian-xie-ru$
  2.                         (ent          name           values   lst             /
  3.                          _setxrecord           alls            dict     dicts
  4.                          list->vbarray           news            obj             obj0
  5.                          olds          xd           xlst            xrec     xt
  6.                         )
  7.                                         ;字典写入
  8.                                         ;($zi-dian-xie-ru$(CAR (entsel))  "ZXCAD" '((1000 . "HELLO WORLD") (1070 . 1) (1040 . 1.0))nil)
  9.   (defun _setxrecord (obj lst)
  10.     (vla-setxrecorddata
  11.       obj
  12.       (list->vbarray (mapcar 'car lst) vlax-vbinteger)
  13.       (list->vbarray (mapcar 'cdr lst) vlax-vbvariant)
  14.     )
  15.   )
  16.   (defun list->vbarray (ptsList TYPE1 / arraySpace sArray)
  17.     (setq arraySpace
  18.            (vlax-make-safearray
  19.              TYPE1
  20.              (cons 0 (- (length ptsList) 1))
  21.            )
  22.     )
  23.     (setq sArray (vlax-safearray-fill arraySpace ptsList))
  24.     (vlax-make-variant sArray)
  25.   )
  26.   (if (and ent (= (type ent)) 'ename)
  27.     (setq obj0 (vlax-ename->vla-object ent))
  28.   )
  29.   (and obj0 (setq obj (VLA-GetExtensionDictionary obj0)))
  30.   (if (= (vla-get-objectname obj) "AcDbDictionary")
  31.     (progn
  32.       (vlax-for        d obj
  33.         (if (and (= (vla-get-objectname d) "AcDbXrecord")
  34.                  (= (strcase (vla-get-name d)) (strcase name))
  35.             )
  36.           (setq xrec d)
  37.         )
  38.       )
  39.       (if xrec
  40.         (progn
  41.           (vla-getxrecorddata xrec 'xt 'xd)
  42.           (if xt
  43.             (progn
  44.               (setq olds
  45.                      (mapcar 'cons
  46.                              (safearray-value xt)
  47.                              (mapcar 'variant-value (safearray-value xd))
  48.                      )
  49.               )
  50.               (setq
  51.                 alls (vl-remove nil (append olds values))
  52.               )
  53.               (cond
  54.                 ((vl-position (cdr (assoc "模式" lst)) (list "追加"))
  55.                  (setq news alls)
  56.                 )
  57.                 (t (setq news values))
  58.               )
  59.               (_setxrecord xrec news)
  60.             )
  61.             (_setxrecord xrec values)
  62.           )
  63.         )
  64.         (progn
  65.           (setq xrec (vla-addxrecord obj name))
  66.           (_setxrecord xrec values)
  67.         )
  68.       )
  69.     )
  70.     (if        (= (vla-get-hasExtensionDictionary obj) :vlax-true)
  71.       (progn
  72.         (setq dicts (vla-GetExtensionDictionary obj))
  73.         (vlax-for dict dicts
  74.           (if (and (= (vla-get-objectname dict) "AcDbXrecord")
  75.                    (= (strcase (vla-get-name dict)) (strcase name))
  76.               )
  77.             (setq xrec dict)
  78.           )
  79.         )
  80.         (if xrec
  81.           (progn
  82.             (vla-getxrecorddata xrec 'xt 'xd)
  83.             (_setxrecord
  84.               xrec
  85.               (append
  86.                 (mapcar        'cons
  87.                         (safearray-value xt)
  88.                         (mapcar 'variant-value (safearray-value xd))
  89.                 )
  90.                 values
  91.               )
  92.             )
  93.           )
  94.         )
  95.       )
  96.       (progn
  97.         (setq dict (vla-getextensiondictionary obj)
  98.               xrec (vla-addxrecord dict name)
  99.         )
  100.         (_setxrecord xrec values)
  101.       )
  102.     )
  103.   )
  104.   ($zi-dian-du-qu$ ent "*" nil)
  105. )
  106. (defun $zi-dian-du-qu$
  107.        (ent name lst / _getxrecord dicts e obj obj0 xd xt)
  108.                                         ;字典读取
  109.                                         ;($zi-dian-du-qu$(CAR (entsel))   "*"  nil)
  110.                                         ;($zi-dian-du-qu$(CAR (entsel))   "ZXCAD"  nil)
  111.   (defun _getxrecord (dc / xt xd)
  112.     (if        (= (vla-get-objectname dc) "AcDbXrecord")
  113.       (progn (vla-getxrecorddata dc 'xt 'xd)
  114.              (if (and xt xd)
  115.                (setq lst
  116.                       (cons
  117.                         (cons (vla-get-name dc)
  118.                               (mapcar
  119.                                 'cons
  120.                                 (safearray-value xt)
  121.                                 (mapcar 'variant-value (safearray-value xd))
  122.                               )
  123.                         )
  124.                         lst
  125.                       )
  126.                )
  127.                (setq lst (cons (vla-get-name dc) lst))
  128.              )
  129.       )
  130.     )
  131.   )
  132.   (if (and ent (= (type ent)) 'ename)
  133.     (setq obj0 (vlax-ename->vla-object ent))
  134.   )
  135.   (and obj0 (setq obj (VLA-GetExtensionDictionary obj0)))
  136.   (if (= (vla-get-objectname obj) "AcDbDictionary")
  137.     (vlax-for dict obj (_getxrecord dict))
  138.     (if        (= (vla-get-hasExtensionDictionary obj) :vlax-true)
  139.       (progn (setq dicts (vla-GetExtensionDictionary obj))
  140.              (vlax-for dict dicts (_getxrecord dict))
  141.       )
  142.     )
  143.   )
  144.   (if
  145.     (= name "*")
  146.      lst
  147.      (vl-remove-if-not
  148.        (function (lambda (x) (= (strcase (car x)) (strcase name))))
  149.        lst
  150.      )
  151.   )
  152. )
  153. (defun $zi-dian-shan-chu$
  154.        (ent name vars lst / E1 obj obj0 OLDS SS TF X)
  155.                                         ;字典删除
  156.                                         ;($zi-dian-shan-chu$(CAR (entsel))   "ZXCAD" '((1070 . 1) (1040 . 2.0))  nil)
  157.   (if (and ent (= (type ent)) 'ename)
  158.     (setq obj0 (vlax-ename->vla-object ent))
  159.   )
  160.   (and obj0 (setq obj (VLA-GetExtensionDictionary obj0)))
  161.   (if (setq OLDS ($zi-dian-du-qu$ ent name NIL))
  162.     (progn
  163.       (setq olds (cdr (assoc name OLDS)))
  164.       (COND
  165.         ((AND obj name vars)
  166.          (setq OLDS (vl-remove-if
  167.                       (function (lambda (a) (assoc (car a) vars)))
  168.                       OLDS
  169.                     )
  170.          )
  171.          (if OLDS
  172.            ($zi-dian-xie-ru$ ent name OLDS lst)
  173.          )
  174.         )
  175.         (T
  176.          (if (= (vla-get-objectname obj) "AcDbDictionary")
  177.            (vlax-for d obj
  178.              (if (= (vla-get-objectname d) "AcDbXrecord")
  179.                (if (= name "*")
  180.                  (vla-delete d)
  181.                )
  182.                (if (= (strcase (vla-get-name d)) (strcase name))
  183.                  (vla-delete d)
  184.                )
  185.              )
  186.            )
  187.            (if (vla-get-hasextensiondictionary obj)
  188.              (vlax-for d (vla-getextensiondictionary obj)
  189.                (if (= (vla-get-objectname d) "AcDbXrecord")
  190.                  (if (= name "*")
  191.                    (vla-delete d)
  192.                  )
  193.                  (if (= (strcase (vla-get-name d)) (strcase name))
  194.                    (vla-delete d)
  195.                  )
  196.                )
  197.              )
  198.            )
  199.          )
  200.         )
  201.       )
  202.       (setq OLDS ($zi-dian-du-qu$ ent name NIL))
  203.     )
  204.   )
  205.   OLDS
  206. )
  207. ;
  208. (defun $objid>ent$ (objID / ent)
  209.   (if objID
  210.     (setq ent (vl-catch-all-apply
  211.                 'vlax-vla-object->ename
  212.                 (list
  213.                   (vl-catch-all-apply
  214.                     'vla-ObjectIdToObject
  215.                     (list
  216.                       (vla-get-activedocument (vlax-get-acad-object))
  217.                       objID
  218.                     )
  219.                   )
  220.                 )
  221.               )
  222.     )
  223.   )
  224.   (if (vl-catch-all-error-p ent)
  225.     (setq ent nil)
  226.   )
  227.   ent
  228. )
  229. ;

  230.   (defun MKEn001 (insertpt jd / obj obj1 axErr basept insertpt axErr1 HatchobjAray ExplodeList objary objLay LineTypeErr objStyle entdata enMlStyle flag ACAD_MLINESTYLE osmode cmdecho filedia)
  231.     (setq osmode (getvar "osmode") cmdecho (getvar "cmdecho") filedia (getvar "filedia"))
  232.     (mapcar 'setvar '("osmode" "cmdecho" "filedia") '(0 0 0))
  233.     (setq basept '(0.000000000000000 0.000000000000000 0.000000000000000))
  234.   (setvar "osmode" 15359)
  235.     ;(setq insertpt (getpoint "\选择插入基点<0,0,0>:"))
  236.   (setvar "osmode" 0)
  237.     (if (null insertpt) (setq insertpt '(0 0 0)))
  238. ;;;******本函数代码由Gu_xl的自动Lisp代码生成器自动生成******
  239.    (cond ((not (TBLSEARCH "block" "yyy12345"))
  240.    (setvar "clayer" "0")
  241.    (setq obj (vla-add (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point '(0 0 0)) "yyy12345"))
  242.    (vla-put-color (vla-item (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))) "0") "7")
  243.    (setvar "Clayer" "0")
  244.    (setvar "CeColor" "256")
  245.    (setq axErr (VL-CATCH-ALL-APPLY 'vla-load (list (vla-get-Linetypes (vla-get-activedocument (vlax-get-acad-object))) "ByLayer" "acadiso.lin")))
  246.    (if (VL-CATCH-ALL-ERROR-P axErr) (setq axErr (VL-CATCH-ALL-APPLY 'vla-load (list (vla-get-Linetypes (vla-get-activedocument (vlax-get-acad-object))) "ByLayer" "EstateCADTools.lin"))))
  247.    (if (not (VL-CATCH-ALL-ERROR-P axErr)) (setvar "CeLtype" "ByLayer"))
  248.    (setvar "CeLTScale" 8.00000000)
  249.    (setvar "CeLweight" -1)
  250.    (setq obj1 (vla-AddLightWeightPolyline obj (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 1 28))'(-0.0144651222462674 -0.4053455131440885 -0.0145257768700013 -0.3825020637239967 0.0165568161537094 -0.3824195322748336 0.0166460323127025 -0.4160196882061602 0.0004574601199830 -0.4220542435516649 -0.1403521516702209 -0.4383852072630968 -0.1687346743282201 -0.4767672243487655 -0.1680778656339516 -0.7241313206464043 -0.1394919184126529 -0.7623620733130406 0.0014024322404991 -0.7779450480700849 0.0176228222128363 -0.7838935501506218 0.0177120383718294 -0.8174937060819484 -0.0133705546518813 -0.8175762375311116 -0.0134312092756151 -0.7947327881110198)))))
  251.   (vla-SetBulge obj1 5 0.3310486734302698)
  252.   (vla-SetBulge obj1 7 0.3310486734302700)
  253.    (vla-put-color (vla-item (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))) "0") "7")
  254.    (setvar "Clayer" "0")
  255.    (setvar "CeColor" "256")
  256.    (setq axErr (VL-CATCH-ALL-APPLY 'vla-load (list (vla-get-Linetypes (vla-get-activedocument (vlax-get-acad-object))) "ByLayer" "acadiso.lin")))
  257.    (if (VL-CATCH-ALL-ERROR-P axErr) (setq axErr (VL-CATCH-ALL-APPLY 'vla-load (list (vla-get-Linetypes (vla-get-activedocument (vlax-get-acad-object))) "ByLayer" "EstateCADTools.lin"))))
  258.    (if (not (VL-CATCH-ALL-ERROR-P axErr)) (setvar "CeLtype" "ByLayer"))
  259.    (setvar "CeLTScale" 8.00000000)
  260.    (setvar "CeLweight" -1)
  261.    (ENTMAKE  '((0 . "SPLINE")(100 . "AcDbEntity")(67 . 0)(8 . "0")(48 . 8.000000000000000)(100 . "AcDbSpline")(210 0.000000000000000 0.000000000000000 1.000000000000000)(70 . 12)(71 . 2)(72 . 30)(73 . 27)(74 . 0)(42 . 0.0000000010000000)(43 . 0.0000000001000000)(40 . 0.000000000000000)(40 . 0.000000000000000)(40 . 0.000000000000000)(40 . 1.000000000000000)(40 . 1.000000000000000)(40 . 2.000000000000000)(40 . 2.000000000000000)(40 . 3.000000000000000)(40 . 3.000000000000000)(40 . 4.000000000000000)(40 . 4.000000000000000)(40 . 5.000000000000000)(40 . 5.000000000000000)(40 . 6.278771812875807)(40 . 6.278771812875807)(40 . 7.278771812875806)(40 . 7.278771812875806)(40 . 8.557543625767296)(40 . 8.557543625767296)(40 . 9.557543625767296)(40 . 9.557543625767296)(40 . 10.55754362576729)(40 . 10.55754362576729)(40 . 11.55754362576729)(40 . 11.55754362576729)(40 . 12.55754362576730)(40 . 12.55754362576730)(40 . 13.55754362576729)(40 . 13.55754362576729)(40 . 13.55754362576729)(10 0.0155553835746105 -0.0052643917728117 0.000000000000000)(41 . 1.000000000000000)(10 0.0155250562627468 0.0061573329360090 0.000000000000000)(41 . 1.000000000000000)(10 0.0154947289508831 0.0175790576448296 0.000000000000000)(41 . 1.000000000000000)(10 -0.0000465675342787 0.0175377919203188 0.000000000000000)(41 . 1.000000000000000)(10 -0.0155878640194405 0.0174965261958080 0.000000000000000)(41 . 1.000000000000000)(10 -0.0155432559399488 0.0006964482319469 0.000000000000000)(41 . 1.000000000000000)(10 -0.0154986478604570 -0.0161036297319142 0.000000000000000)(41 . 1.000000000000000)(10 -0.0073884528882055 -0.0190778807718981 0.000000000000000)(41 . 1.000000000000000)(10 0.0007217420840460 -0.0220521318118820 0.000000000000000)(41 . 1.000000000000000)(10 0.0711689172896572 -0.0298436191898695 0.000000000000000)(41 . 1.000000000000000)(10 0.1416160924952683 -0.0376351065678569 0.000000000000000)(41 . 1.000000000000000)(10 0.1701230638911251 -0.0461223743165809 0.000000000000000)(41 . 0.8024623404975734)(10 0.1702020396998372 -0.0758658592304283 0.000000000000000)(41 . 1.000000000000000)(10 0.1705304440147311 -0.1995479073660651 0.000000000000000)(41 . 1.000000000000000)(10 0.1708588483618303 -0.3232299555016165 0.000000000000000)(41 . 1.000000000000000)(10 0.1709378242027548 -0.3529734404158654 0.000000000000000)(41 . 0.8024623404928947)(10 0.1424763257449687 -0.3616119725574273 0.000000000000000)(41 . 1.000000000000000)(10 0.0720715199786027 -0.3697774544375848 0.000000000000000)(41 . 1.000000000000000)(10 0.0016667142044611 -0.3779429362921238 0.000000000000000)(41 . 1.000000000000000)(10 -0.0064275718779832 -0.3809602139645178 0.000000000000000)(41 . 1.000000000000000)(10 -0.0145218579604275 -0.3839774916369119 0.000000000000000)(41 . 1.000000000000000)(10 -0.0144772498809358 -0.4007775696007730 0.000000000000000)(41 . 1.000000000000000)(10 -0.0144326418014440 -0.4175776475646340 0.000000000000000)(41 . 1.000000000000000)(10 0.0011086546837179 -0.4175363818401233 0.000000000000000)(41 . 1.000000000000000)(10 0.0166499511688797 -0.4174951161156127 0.000000000000000)(41 . 1.000000000000000)(10 0.0166196238570160 -0.4060733914067920 0.000000000000000)(41 . 1.000000000000000)(10 0.0165892965451524 -0.3946516666979714 0.000000000000000)(41 . 1.000000000000000)))
  262.    (setq obj1 (vlax-ename->vla-object (entlast)))
  263. (if (not (or (= (vla-get-name obj) "*Model_Space") (WCMATCH (vla-get-name obj) "*Paper_Space*")))
  264.     (progn
  265.    (setq objary (vla-CopyObjects (vla-get-ActiveDocument (vlax-get-acad-object)) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbObject (cons 0 0)) (list obj1))) obj))
  266.    (vla-delete obj1)
  267.     (setq obj1 (car (vlax-safearray->list (vlax-variant-value objary))))
  268.    ) ;_ progn
  269.   ) ;_ if
  270.    )
  271.   )
  272.    (setq obj (vla-get-ModelSpace(vla-get-ActiveDocument (vlax-get-acad-object))))
  273.    (vla-put-color (vla-item (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))) "0") "7")
  274.    (setvar "Clayer" "0")
  275.    (setvar "CeColor" "256")
  276.    (setq axErr (VL-CATCH-ALL-APPLY 'vla-load (list (vla-get-Linetypes (vla-get-activedocument (vlax-get-acad-object))) "ByLayer" "acadiso.lin")))
  277.    (if (VL-CATCH-ALL-ERROR-P axErr) (setq axErr (VL-CATCH-ALL-APPLY 'vla-load (list (vla-get-Linetypes (vla-get-activedocument (vlax-get-acad-object))) "ByLayer" "EstateCADTools.lin"))))
  278.    (if (not (VL-CATCH-ALL-ERROR-P axErr)) (setvar "CeLtype" "ByLayer"))
  279.    (setvar "CeLTScale" 1.00000000)
  280.    (setvar "CeLweight" -1)
  281.     (entmake (list '(0 . "INSERT") (cons 2 "yyy12345") (cons 10 insertpt)  (cons 50   (+ (/ pi 2) jd) )  ))
  282.    ;(setq obj1 (vla-InsertBlock obj (vlax-3d-point '(0.000000000000000 0.000000000000000 0.000000000000000)) "yyy12345" 1.00000000 1.00000000 1.00000000 1.57079633))
  283.     ;(vla-put-layer obj1 "0")
  284.     ;(command "move" (entlast) "" basept insertpt)
  285.     (mapcar 'setvar '("osmode" "cmdecho" "filedia") (list osmode cmdecho filedia))
  286.   )


  287. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  288. (defun vxs (e / i v lst ppp)
  289.   (setq i 0)
  290.   (while
  291.     (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
  292.      (setq lst (cons v lst))
  293.   )
  294.   (setq ppp (reverse lst) )
  295. (append (list(vlax-curve-getpointatparam e 0)) ppp )
  296.   
  297.   )
  298. ;;;;;;;;;;;;;;;;;;;;;
  299. (defun bm1005 (c ent / jb )
  300. (setq jb (cdr (assoc 5 (entget c))))
  301. (regapp "ZXCAD");必须先注册一个app的名字



  302.   
  303. (princ)

  304. )
  305. ;;;;
  306. (defun bm10051 (ent-text ent-line /  OBJ text-objid txt-jb)
  307. ;(setq jb (cdr (assoc 5 (entget c))))
  308. (regapp "ZXCAD");必须先注册一个app的名字
  309. ;两个图元绑定,支持复制粘贴,绑定关系依然不变,试试下面这个代码
  310. ;(setq ent-text(car(entsel "请点击一个文字")))
  311. ;(setq ent-line(car(entsel "请点击一根直线")))
  312. (setq obj(vlax-ename->vla-object ent-text))
  313. (setq text-objid(vla-get-objectid obj));文字的objid
  314. (setq txt-jb(cdr(assoc 5(entget ent-text))));文字句柄
  315. ($zi-dian-xie-ru$ ent-line  "ZXCAD" (list(cons 330 txt-jb))nil);将文字的id写入到直线里面,当用户复制图纸的时候,绑定关系依然成立
  316. ;(vlax-safearray->list(cdr(assoc 330(cdr(assoc "ZXCAD"($zi-dian-du-qu$ (CAR (entsel))   "ZXCAD"  nil))))));读取看看
  317. ;(entget(cdr(assoc 330(cdr(assoc "ZXCAD"($zi-dian-du-qu$ (CAR (entsel))   "ZXCAD"  nil))))));读取看看

  318.   ;(entget(cdr(assoc 330(entget(car(entsel))))))
  319. ($zi-dian-xie-ru$ ent-line  "ZXCAD" (list(cons 330 txt-jb))nil)

  320.   
  321. (princ)

  322. )
  323. ;;;;;
  324. (defun c:gbz11 ( / cc p1 plst zbb juli jiaodu i )
  325. (vl-load-com)
  326.   (setq cc (car(entsel "\n 请选择坡顶线:")))
  327.   (bm10051 cc cc)
  328. (setq plst (vxs cc) )
  329. (setq p1 nil)
  330. (setq zbb (mapcar'list plst (cdr plst)) )
  331. (foreach x zbb
  332.      (setq juli (distance (car x) (cadr x)))
  333.      (setq jiaodu (angle (car x) (cadr x) ))
  334.     (MKEn001  (car x) jiaodu )
  335.   ;(bm1005 cc (entlast))
  336.   (bm10051 cc (entlast))
  337. (setq i 0)
  338.   (repeat   (fix ( / juli 0.8) )
  339.    (MKEn001 (polar (car x) jiaodu (* 0.8 (1+ i) ))  jiaodu )
  340.     ;(bm1005 cc (entlast))
  341.     (bm10051 cc (entlast))
  342. (setq i (1+ i))
  343.     )
  344.   
  345.   )
  346. (princ)
  347. )





  348. ;(MKEn001  (getpoint)(angle (getpoint)(getpoint)))

  349. ; (cdr(assoc 1005(cdr(car(cdr(assoc -3 (entget(car(entsel))'("*"))))))))
  350. ;选择对象: "691"
  351. (defun c:300xz  ( / cc ss sss i ent)
  352. (setq cc (car(entsel "\n 请选择坡顶线:")))
  353. (setq ss (ssget "x" '((0 . "insert")(2 . "yyy12345"))))

  354. (setq  i 0)(setq sss (ssadd))
  355. (repeat  (sslength ss)
  356.     (setq ent (ssname ss i))
  357.     (if  (equal (vlax-safearray->list(cdr(assoc 330(cdr(assoc "ZXCAD"($zi-dian-du-qu$ ent   "ZXCAD"  nil))))))
  358.       (vlax-safearray->list(cdr(assoc 330(cdr(assoc "ZXCAD"($zi-dian-du-qu$ cc   "ZXCAD"  nil))))))
  359.       )


  360.       ;(= (cdr(assoc 1005(cdr(car(cdr(assoc -3 (entget ent '("*")))))))) (cdr (assoc 5 (entget cc))) )
  361.      (ssadd  ent sss)
  362.       )
  363. (setq i (1+ i))

  364.   ) (SSSETFIRST nil sss)
  365.   (princ)
  366.        )
  367. ;;;;
  368. (defun c:1005xz  ( / cc ss sss i ent)
  369. (setq cc (car(entsel "\n 请选择坡顶线:")))
  370. (setq ss (ssget "x" '((0 . "insert")(2 . "yyy12345"))))

  371. (setq  i 0)(setq sss (ssadd))
  372. (repeat  (sslength ss)
  373.     (setq ent (ssname ss i))
  374.     (if  (= (cdr(assoc 1005(cdr(car(cdr(assoc -3 (entget ent '("*")))))))) (cdr (assoc 5 (entget cc))) )
  375.      (ssadd  ent sss)
  376.       )
  377. (setq i (1+ i))

  378.   ) (SSSETFIRST nil sss)
  379.   (princ)
  380.        )

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-2 10:06:50 | 显示全部楼层
本帖最后由 dcl1214 于 2025-6-6 21:52 编辑

  1. (defun $objid>ent$ (objID / ent)
  2.   (if objID
  3.     (setq ent (vl-catch-all-apply
  4.                 'vlax-vla-object->ename
  5.                 (list
  6.                   (vl-catch-all-apply
  7.                     'vla-ObjectIdToObject
  8.                     (list
  9.                       (vla-get-activedocument (vlax-get-acad-object))
  10.                       objID
  11.                     )
  12.                   )
  13.                 )
  14.               )
  15.     )
  16.   )
  17.   (if (vl-catch-all-error-p ent)
  18.     (setq ent nil)
  19.   )
  20.   ent
  21. )
回复 支持 反对

使用道具 举报

发表于 2025-9-25 12:20:00 | 显示全部楼层

(defun SetXrecord2 (txt zx name / dict satypes savalues vlaen vtobject vttypes vtvalues xrcd)
;(setq txt (car (entsel "\n点取文字:")))
;(setq zx (car (entsel "\n点取直线:")))
(setq vlaen (vlax-ename->vla-object txt))
(setq dict (vla-GetExtensionDictionary vlaen))
(setq saTypes (vlax-make-safearray vlax-vbInteger '(0 . 0)))
(vlax-safearray-fill saTypes (list 331))
(setq vtTypes (vlax-make-variant saTypes))
(setq saValues (vlax-make-safearray vlax-vbVariant '(0 . 0)))
(setq vtObject (vlax-make-variant (cdr (assoc 5 (entget zx)))))
(vlax-safearray-fill saValues (list vtObject))
(setq vtValues (vlax-make-variant saValues))
(setq xrcd (vla-AddXRecord dict name))
(vla-SetXRecordData xrcd vtTypes vtValues)
)
;(setq e1 (get-dict-ename-entget (car (entsel "\n点取文字")) "00"))
(defun get-dict-ename-entget (txt key / en xrec-ent xrec-handle xx);
  (setq en (cdr (assoc 360 (entget txt))))
  (setq xrec-handle (cdr (assoc -1 (dictsearch en key))))
  (setq xrec-ent (entget xrec-handle))
  (setq xx (cdr (assoc 331 xrec-ent))) ; 返回ENAME
)
这样写应该也能达到目的
回复 支持 反对

使用道具 举报

发表于 2025-6-1 15:01:38 | 显示全部楼层
强哥这么厉害吗,大佬你厉害还是强哥厉害.
回复 支持 反对

使用道具 举报

发表于 2025-6-1 17:00:10 | 显示全部楼层
大佬介绍下怎么使用呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-1 23:58:30 | 显示全部楼层
本帖最后由 dcl1214 于 2025-6-6 21:51 编辑

两个图元绑定,支持复制粘贴,绑定关系依然不变,试试下面这个代码
  1. (setq ent-text(car(entsel "请点击一个文字")))
  2. (setq ent-line(car(entsel "请点击一根直线")))
  3. (setq obj(vlax-ename->vla-object ent-text))
  4. (setq text-objid(vla-get-objectid obj));文字的objid
  5. (setq txt-jb(cdr(assoc 5(entget ent-text))));文字句柄
  6. ($zi-dian-xie-ru$ ent-line  "ZXCAD" (list(cons 330 txt-jb))nil);将文字的id写入到直线里面,当用户复制图纸的时候,绑定关系依然成立
  7. (cdr(assoc 330(cdr(assoc "ZXCAD"($zi-dian-du-qu$ (CAR (entsel))   "ZXCAD"  nil)))));读取看看


回复 支持 反对

使用道具 举报

发表于 2025-6-3 17:10:15 | 显示全部楼层
大佬介绍下运用场景~
回复 支持 反对

使用道具 举报

发表于 2025-6-4 12:16:10 | 显示全部楼层

(cdr(assoc 330(cdr(assoc "ZXCAD"($zi-dian-du-qu$ (CAR (entsel))   "ZXCAD"  nil)))));读取看看
读取了,是个安全数组.vlax-safearray->list 解析了是个表.如何返回实体的objectID啊.
回复 支持 反对

使用道具 举报

发表于 2025-6-5 08:59:06 | 显示全部楼层
就这么完事调试了可以啊
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-10-6 01:44 , Processed in 0.196296 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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