yoyoho 发表于 2008-7-28 12:01:00

[求助]请教高手如何取3DSOLID物件顶点座标列表?

<p>请教高手如何以LISP或VLISP办到点选3DSOLID物件,<br/>求附图ZZ.DWG,Z1,Z2,Z3,Z4高度及3DSOLID物件顶&nbsp; <br/>点座标列表,麻烦诸位高手,谢谢!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

yoyoho 发表于 2008-7-29 09:59:00

<p>高手们:</p><p>麻烦给个思路或给个建议,指引个方向,该如何办到阿! 谢谢!</p>

santalin 发表于 2010-9-14 18:41:00

<p>同问啊</p>

xhq1954425 发表于 2010-9-15 07:06:00

不知有没有直接的办法?如果只是平面立体,用笨法可以复制一个后两次炸开成线,然后获取各端点。

alin 发表于 2010-10-7 14:22:00

<p>忘了原程序在哪了,如果要可以再找找,注意上面的邮箱早废了。测试过对楼主的图中的简单实体有效。</p>

Nico 发表于 2012-10-29 18:28:28

alin 发表于 2010-10-7 14:22 static/image/common/back.gif
忘了原程序在哪了,如果要可以再找找,注意上面的邮箱早废了。测试过对楼主的图中的简单实体有效。

好东西麻烦来个源代码

alin 发表于 2012-10-30 11:31:16

本帖最后由 alin 于 2012-10-30 11:32 编辑

原代码找不到了,但是这个东西很久以前就被解码了,是(XOR 95)

(defun acis-decode (s)                        ; decode an encrypted acis-string of dxf group 1
(apply (function strcat)
         (mapcar
         (function (lambda (c)      ; decode one char
                     (cond                ; by Owen Wengerd
                         ((= c 32) " ")
                         ((= c 86) "I")
                         (T (chr (boole 6 c 95)))
                     )
                     )
         )
         (std-string->list s)
         )
)
)
;;;
(defun STD-STRING->LIST (s / lst)
(if (= (type s) 'STR)
    (while (/= s "")
      (setq lst (cons (ascii (substr s 1 1)) lst) s (substr s 2))
    )
)
(reverse lst)
)

vlisp2012 发表于 2012-10-30 21:48:41

本帖最后由 vlisp2012 于 2012-10-30 22:03 编辑

太高深了,楼上能在完善一下吗?

alin 发表于 2012-10-31 08:05:24

vlisp2012 发表于 2012-10-30 21:48 static/image/common/back.gif
太高深了,楼上能在完善一下吗?

在图档创建一个长方体,运行以下的测试程序:
(DEFUN c:TTT ()
(setq elist (entget (car (entsel "\nSelect a 3DSolid: "))))
(foreach e elist
    (if        (= (car e) 1)
      (progn
        (princ "\n")
        (princ (acis-decode (cdr e)))
      )
    )
)
)
你会发现你得到的东西和用AUTOCAD输出的SAT文件很相似。可以这么说,除了用以上的解码程序,也可以用输出的SAT文件读取信息。但ACIS码比较复杂,不容易搞清里面的几何关系。

vlisp2012 发表于 2012-10-31 20:34:59

多谢alin 了,我在好好研究一下!!受教了!
页: [1] 2
查看完整版本: [求助]请教高手如何取3DSOLID物件顶点座标列表?