Kerry 发表于 2010-1-22 04:59:02

-+{挑战}+-序列化扩展数据

序列化附着图形中所有实体(模型空间)的扩展数据,然后将数据读回内存
格式或语言无关紧要,只是您可以读取/写入数据。
每个点都有五个扩展数据元素,包括应用程序名称(myxdata)
您可以多快读取/写入
**** Hidden Message *****

frtfff 发表于 2010-1-22 05:04:36


大约3个月,我认为
[添加:]嗯嗯
非欧特克DWG。 此 DWG 文件由
非 Autodesk 开发或许可的软件应用程序保存。

Kerry 发表于 2010-1-22 05:19:59

:kewl:

grrrr 发表于 2010-1-22 05:47:37


哈,是的,Bricscad有一个更酷的扩展数据编辑器

Kerry 发表于 2010-1-22 06:33:07


好的,
我将尝试Lisp破解。

Kerry 发表于 2010-1-22 06:54:28

你好,丹,
问题出在哪里?
用lisp试试,花两个小时。

Kerry 发表于 2010-1-22 07:02:38

嗯,不到两个小时,
“旺达”在14秒内抓住了它……有点慢,但这是意料之中的
(defun c:kdub_doit (/ start ss datalist datafilename datalist
                  itemdata readdatalist linecount elapsedtime)
;; codeHimBelonga kdub@theSwamp 20100122
(setq start (getvar "millisecs"))
(if (setq ss (ssget "X" '((-3 ("myxdata")))))
    (progn (setq datalist   '()
               datafilename "c:/Test_DoIt_MyXData.txt"
         )
         (close (open datafilename "W"))
         ;;------------------------------
         ;; Collect the Data
         (foreach item (kdub:ss->entlist ss)
             (if (setq itemdata
                        (cdr
                        (cadr
                            (assoc -3
                                 (setq ent (entget item '("myxdata")))
                            )
                        )
                        )
               )
               (setq datalist (cons itemdata datalist))
             )
         )
         ;;------------------------------
         ;; Write it Out
         (kdub:list-to-textfile
             datafilename
             (mapcar 'vl-prin1-to-string (reverse datalist))
         )
         ;;------------------------------
         ;; Read it Back
         (setq readdatalist (mapcar 'read
                                    (kdub:textfile-to-list datafilename)
                              )
               linecount    (length readdatalist)
               elapsedtime(itoa (- (getvar "millisecs") start))
         )
    )
)
(princ (strcat "\n "
               (itoa linecount)
               " Objects Collected in : "
               elapsedtime
               " Milliseconds."
         )
)
(princ)
)
(princ)

图书馆资料
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------
;;;
(defun kdub:ss->entlist (ss / i returnval)
(if (and ss (< 0 (sslength ss)))
    (progn (setq i 0)
         (repeat (sslength ss)
             (setq returnval (cons (ssname ss i) returnval)
                   i         (1+ i)
             )
         )
    )
)
(if returnval
    (reverse returnval)
    nil
)
)
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------
;;;
(defun kdub:textfile-to-list (filename      /
                              fileobject    filefound
                              filesystem    openfileas
                              returnvalue
                           )
(if (setq filefound (findfile filename))
    (progn (setq filesystem (vlax-create-object "Scripting.FileSystemObject")
               fileobject (vlax-invoke filesystem "GetFile" filefound)
               openfileas (vlax-invoke fileobject "OpenAsTextStream" 1 0)
         )
         (while (= (vlax-get openfileas "AtEndOfStream") 0)
             (setq returnvalue (cons (vlax-invoke openfileas "ReadLine")
                                     returnvalue
                               )
             )
         )
         (vlax-invoke openfileas "Close")
         (vlax-release-object openfileas)
         (vlax-release-object fileobject)
         (vlax-release-object filesystem)
         (reverse returnvalue)
    )
    nil
)
)
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------
;;;
(defun kdub:list-to-textfile (filename      datalist
                              /             fileobject
                              filefound   filesystem
                              openfileas    returnvalue
                           )
(if (setq filefound (findfile filename))
    (progn (setq filesystem (vlax-create-object "Scripting.FileSystemObject")
               fileobject (vlax-invoke filesystem "GetFile" filefound)
               openfileas (vlax-invoke fileobject "OpenAsTextStream" 2 0)
         )
         (foreach line datalist
             (vlax-invoke openfileas "WriteLine" line)
         )
         (vlax-invoke openfileas "Close")
         (vlax-release-object openfileas)
         (vlax-release-object fileobject)
         (vlax-release-object filesystem)
         t
    )
    nil
)
)
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------
;;;

和证明它的图片

Kerry 发表于 2010-1-22 07:10:51


Dan,我还没有安装BricsCad..当我做的时候比较时间是有趣的。

Kerry 发表于 2010-1-22 07:18:22

丹,我每个点只得到4个元素?
Piccy附件:8204 kB文件

gile 发表于 2010-1-22 07:39:06

4+应用名称
页: [1] 2
查看完整版本: -+{挑战}+-序列化扩展数据