¸®½À °­Á - ActiveX¸¦ ÀÌ¿ëÇÑ Xdata ÀÔ·ÂÇÔ¼ö, Xdata ¾ò±âÇÔ¼ö.


º» °­Á´ ¾ÆÅ°¿ÀÇǽº(±èÈñÅÂ)¿¡ ÀÇÇØ ¸¸µé¾î Á³À¸¸ç ¾î¶°ÇÑ À¥À̳ª
ÃâÆÇ¹°¿¡ ¾ÆÅ°¿ÀÇǽº(±èÈñÅÂ)ÀÇ µ¿ÀǾøÀÌ ¿Ã¸®´Â °ÍÀ» Çã¶ôÇÏÁö ¾Ê½À´Ï´Ù.

 

activex ¸¦ ÀÌ¿ëÇÑ xdata ¸¦ ÀÔ·ÂÇϰųª ¾ò´Â ÇÔ¼öÀÔ´Ï´Ù.
kht:SetXData ´Â xdata¸¦ object ¿¡ ÀÔ·ÂÇÏ´Â ÇÔ¼öÀ̰í
kht:GetXData ´Â object °¡ °¡Áö°í ÀÖ´Â xdata¸¦ ¾ò´ÂÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.



(kht:SetXData (vlax-ename->vla-object (car (entsel))) "kht1" '(1070 . 200))

=> ÇØ´ç object ¿¡ appid kht1 ÀÇ xdata (1070 . 200) ¸¦ ÀÔ·ÂÇÑ´Ù.

(kht:GetXData (vlax-ename->vla-object (car (entsel))) "kht1")

=> ((1001 . "kht1") (1070 . 200)) ¸®ÅÏ , xdata°¡ ¾ø´Â object ´Â nil ¸®ÅÏ

ÄÚµå


  
  (defun kht:GetXData (Obj App / FldLst ValLst Xd_Fld Xd_Val)
    (vla-GetXData Obj App 'Xd_Fld 'Xd_Val)
    (if (and Xd_Fld Xd_Val)
      (setq FldLst (vlax-safearray->list Xd_Fld)
            ValLst (mapcar 'vlax-variant-value
                     (vlax-safearray->list Xd_Val)
                   )
      )
    )
    (mapcar '(lambda (f v) (cons f v)) FldLst ValLst)
  )

  (defun kht:SetXData (Obj App dat / ex typarr datarr  errcat)
    (if (setq ex (VxGetXData obj app))
      (if (assoc (car dat) ex)
        (setq ex (subst dat (assoc (car dat) ex) ex))
        (setq ex (append ex (list dat)))
      )
      (setq ex (list (cons 1001 app) dat))
    )
    (setq typarr (vlax-make-safearray vlax-vbinteger (cons 0  (1- (length ex)))))
    (setq datarr (vlax-make-safearray vlax-vbvariant (cons 0  (1- (length ex)))))
    (and
      (/= 'VL-CATCH-ALL-APPLY-ERROR
          (type (setq errcat (vl-catch-all-apply 'vlax-safearray-fill (list typarr (mapcar 'car ex))))))
      (/= 'VL-CATCH-ALL-APPLY-ERROR
          (type (setq errcat (vl-catch-all-apply 'vlax-safearray-fill (list datarr (mapcar 'cdr ex))))))
      (/= 'VL-CATCH-ALL-APPLY-ERROR
          (type (setq errcat (vl-catch-all-apply 'vla-setxdata (list obj typarr datarr)))))
    )
    (if (vl-catch-all-error-p errcat)
      (princ (strcat "\n Function \"VxSetXData\" error->: " (vl-catch-all-error-message errcat)))
    )
  )


¼³¸í

  ;; object ¿¡¼­ xdata ¸¦ ¾ò´Â ÇÔ¼öÀÔ´Ï´Ù.
  (defun kht:GetXData (Obj App / FldLst ValLst Xd_Fld Xd_Val)
    ;; object ¿¡¼­ ÇØ´ç app ÀÇ xdata ¸¦ Xd_Fld, Xd_Val ·Î ÀúÀåÇÕ´Ï´Ù.
    (vla-GetXData Obj App 'Xd_Fld 'Xd_Val)
    ;; xdata °¡ ÀÖ´Ù¸é
    (if (and Xd_Fld Xd_Val)
      ;; ¹è¿­À» ¸®½ºÆ®·Î º¯È¯ÇÏ¿©
      (setq FldLst (vlax-safearray->list Xd_Fld)
            ValLst (mapcar 'vlax-variant-value
                     (vlax-safearray->list Xd_Val)
                   )
      )
    )
    ;; Äڵ庰·Î ¹­¾î¼­ ¸®ÅÏÇÕ´Ï´Ù.
    (mapcar '(lambda (f v) (cons f v)) FldLst ValLst)
  )


  ;; xdata ¸¦ object ¿¡ ÀÔ·ÂÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.
  (defun kht:SetXData (Obj App dat / ex typarr datarr  errcat)
    ;; VxGetXData ÇÔ¼ö·Î ÇØ´ç object ÀÇ xdata¸¦ ¾ò¾î¼­
    (if (setq ex (VxGetXData obj app))
      ;; ±× xdata ¿¡ ÀÔ·ÂÇÏ·Á´Â data °¡ Á¸ÀçÇϸé
      (if (assoc (car dat) ex)
        ;; »õ·Î¿î data·Î ±³Ã¼Çϰí
        (setq ex (subst dat (assoc (car dat) ex) ex))
        ;; ÀÔ·ÂÇÏ·Á´Â data°¡ ¾ø´Ù¸é ±âÁ¸ xdata ¸®½ºÆ®¿¡ Ãß°¡ ÇÕ´Ï´Ù.
        (setq ex (append ex (list dat)))
      )
      ;; object ¿¡ xdata °¡ ¾ø´Ù¸é »õ·Î¿î xdata ¸®½ºÆ®¸¦ ¸¸µì´Ï´Ù.
      ;; activex ¿¡¼­ appid ´Â 1001 ¿¡ ÇØ´çÇÕ´Ï´Ù.
      (setq ex (list (cons 1001 app) dat))
    )
    ;; xdata ¸¦ ÀÔ·ÂÇÒ ¹è¿­À» ¼±¾ðÇÕ´Ï´Ù.
    (setq typarr (vlax-make-safearray vlax-vbinteger (cons 0  (1- (length ex)))))
    (setq datarr (vlax-make-safearray vlax-vbvariant (cons 0  (1- (length ex)))))
    ;; ÀϹݸ®½ÀÇÔ¼ö¿¡¼­ error °¡ ¹ß»ýÇÏ¸é ±×³É error ¸Þ¼¼Áö¸¦ Ãâ·ÂÇϰí Á¾·áÇÏÁö¸¸
    ;; axtivex ÇÔ¼öÁß error °¡ ¹ß»ýÇϸé object °¡ ±×³É »ç¶óÁö´Âµî ¿¹»óÄ¡¸øÇÑ ¹®Á¦°¡ ¹ß»ýÇÕ´Ï´Ù.
    ;; À̸¦À§ÇØ vl-catch-all-apply,vl-catch-all-error-message,vl-catch-all-error-p ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù.
    ;; ÀÚ¼¼ÇÑ »ç¿ë¹ýÀº µµ¿ò¸»À» ÀÌ¿ëÇϼ¼¿ä.
    ;; (kht:SetXData (vlax-ename->vla-object (car (entsel))) "kht1" '("ABC" . 200)) 
    ;; "ABC" ´Â DXF Äڵ尡 ¾Æ´Ï¹Ç·Î ÀÌ·¸°Ô ÇÏ¸é ¿¡·¯°¡ ¹ß»ýÇϰÚÁÒ. 
    ;; ±×·³ ¿¡·¯¸¦ Àâ¾Æ¼­ ¿¡·¯¸Þ¼¼Áö¸¦ Ãâ·ÂÇϰí Á¾·áµË´Ï´Ù.
    (and
      (/= 'VL-CATCH-ALL-APPLY-ERROR
          ;; dxf Äڵ帮½ºÆ®¸¦ º¯¼ö¿¡ ÀúÀå
          (type (setq errcat (vl-catch-all-apply 'vlax-safearray-fill (list typarr (mapcar 'car ex))))))
      (/= 'VL-CATCH-ALL-APPLY-ERROR
          ;; ÇØ´ç °ª¸®½ºÆ®¸¦ º¯¼ö¿¡ ÀúÀå
          (type (setq errcat (vl-catch-all-apply 'vlax-safearray-fill (list datarr (mapcar 'cdr ex))))))
      (/= 'VL-CATCH-ALL-APPLY-ERROR
          ;; vla-setxdata ·Î object ¿¡ xdata ÀÔ·Â
          (type (setq errcat (vl-catch-all-apply 'vla-setxdata (list obj typarr datarr)))))
    )
    ;; ¸¸¾à ¿¡·¯°¡ ¹ß»ýÇÏ¸é ¿¡·¯¸Þ¼¼Áö¸¦ Ãâ·ÂÇϰí Á¾·á...
    (if (vl-catch-all-error-p errcat)
      (princ (strcat "\n Function \"VxSetXData\" error->: " (vl-catch-all-error-message errcat)))
    )
  )