从虚拟文件到cad的高难度问题
<p>这是一个虚拟文件(vrml),可以使用文本文件打开。图形是一个飞行器</p><p></p><p> </p><p>我希望能在cad中做到以下几项:</p><p>1、设置一个按钮点击后弹出一个打开文本的对话框,选择.wrl格式的文件(这个比较简单,我用易语言和vb都可以很简单的做到)</p><p>2、自动查找到这一部分开始绘制#err1后再开始绘制#err2直至最后一个[图形1]<br/>============================<br/>405 coord Coordinate {<br/>406 point [ <br/>407 # err 1<br/>408 -2500.00 5.33 859.18, <br/>409 -2500.00 -0.76 805.89, <br/>410 -2500.00 -17.31 681.64, <br/>.......<br/>=============================</p><p>3、将所有的#err之间连接成surface,[图形2]<br/>==================================<br/>34 # Canopy<br/>35 Shape {<br/>36 geometry IndexedFaceSet {<br/>37 coordIndex [<br/>38 # err 1<br/>39 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 40 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, -1<br/>41 42, 41, 40, 39, 38, 37,<br/>========================================</p><p>是否有人可以做到?</p><p>恳请大家帮忙,我的cad不太懂,公司要求在cad中做</p><p>你也可以留下qq 或email 我们今天放假,年后我就会联系,</p><p>你也可以将代码发送到我的邮箱:barque-123@163.com 谢谢大家</p> 本帖最后由 作者 于 2007-2-10 10:13:21 编辑 <br /><br /> <p>也可以用vb实现,但cad中只需要点一个按钮就执行完成</p><p></p><p>***所有行数都不固定,但文字是固定的,如:</p><p> # Canopy<br/> Shape {<br/> geometry IndexedFaceSet {<br/> coordIndex [</p><p> coord Coordinate {<br/> point [ </p><p># err 1 这个就会有重复出现</p> <p>如果你能把 这个文件 解析为 2个坐标为一组的线,颜色,那么交给CAD就很好处理了,或者你把VB的代码那出来看看。因为你的 文件格式大家不理解。156558475</p> 本帖最后由 作者 于 2007-2-25 16:17:15 编辑 <br /><br /> <p>我已经用另一个程序(易语言)将所有的内容改写成命令模式,在rhino(犀牛)中用读入命令文本即可自动执行所有命令</p><p>=====类似于这样=====</p><p>line 0,0 100,100 <br/>line 300,200 400,500 <br/>pline 0,70 400,200 300,460 </p><p>============<br/>希望大家帮我实现:<br/><font color="#0033ff">我想在autocad中实现:当打开一个特定(指定的)dwg文件时自动读入某个文件夹某个文本内的命令并执行,而且整个过程不需要手动执行任何命令或点击。(文本大约20kb,2000行以上)</font></p><p>我正在考虑用宏来执行(考虑中...),请大家指点</p> <p>仍然没有解决!</p><p>期待大家帮助...</p> 本帖最后由 作者 于 2007-2-27 16:30:02 编辑假设文件名为abc.txt,内容如下:
line 0,0 100,100
line 300,200 400,500
pline 0,70 400,200 300,460
代码如下即可
(DEFUN c:tmp (/ FILE LINE)
(SETQ file (OPEN "c://abc.txt" "r"));可改改文件路径及名称
(WHILE (SETQ line (READ-LINE file))
(apply 'command (std-strtok line " "))
(command "")
)
(CLOSE file)
)
(DEFUN STD-STRTOK (s delims / len s1 i c lst)
(SETQ delims (vl-string->list delims)
len (STRLEN s)
s1 ""
i (1+ len)
)
(WHILE (> (SETQ i (1- i)) 0)
(SETQ c (SUBSTR s i 1))
(IF (MEMBER (ASCII c) delims)
(IF (/= s1 "") ; no null tokens
(SETQ lst (CONS s1 lst)
s1""
)
)
(SETQ s1 (STRCAT c s1))
)
)
(IF (/= s1 "")
(CONS s1 lst) ; no ("" "1" "2")!
lst
)
)
这里只是教你一个方法,如果可以,你最好把那个2000行的文本上传,这样程序可以写的更有针对性
其实lisp要实现你的要求一点也不高难度,呵呵
<p>非常谢谢<strong><font face="Verdana" color="#61b713">fools</font></strong> 的帮助,但是我想要的是当我打开34839893.dwg这个文件时,程序便自动执行<font color="#ff00ff">c://abc.txt"这个文本内的命令</font></p><p>当打开其他的.dwg文件时则一切同正常</p> 还是讲方法,实现自动加载的方法有很多,以最常用的acad.lsp为例
1.将ACADLSPASDOC值设为1,为了保证每次打开图形的时候都会执行acad.lsp
2.将下面的代码加入到acad.lsp的末尾
(DEFUN tmp (/ FILE LINE)
(SETQ file (OPEN "c://abc.txt" "r")) ;可修改文件路径及名称
(WHILE (SETQ line (READ-LINE file))
(APPLY 'COMMAND (std-strtok line " "))
(COMMAND "")
)
(CLOSE file)
)
(DEFUN STD-STRTOK (s delims / len s1 i c lst)
(SETQ delims (VL-STRING->LIST delims)
len (STRLEN s)
s1 ""
i (1+ len)
)
(WHILE (> (SETQ i (1- i)) 0)
(SETQ c (SUBSTR s i 1))
(IF (MEMBER (ASCII c) delims)
(IF (/= s1 "") ; no null tokens
(SETQ lst (CONS s1 lst)
s1""
)
)
(SETQ s1 (STRCAT c s1))
)
)
(IF (/= s1 "")
(CONS s1 lst) ; no ("" "1" "2")!
lst
)
)
(IF (EQUAL (STRCASE (GETVAR "dwgname")) "34839893.DWG")
(tmp)
)
注意最后增加了一行,这只是示例,实际应用时,你不一定要这样写,
比如,你可以先将所有希望操作dwg和txt同名,然后程序自动找同名字的txt,然后执行
<p>总是不对,有点问题:因为文本第一行开始就是命令</p><p>附上文本,请<strong><font face="Verdana" color="#61b713">fools</font></strong>继续帮助</p> 本帖最后由 作者 于 2007-2-28 12:16:25 编辑
因为你提供的文本文件格式变了,所以代码要做调整,如下:
注意:你提供的文件123.txt,第二行的0要去掉.
(DEFUN c:tmp (/ file lines line)
(SETQ file (OPEN "c:/123.txt" "r"))
(SETQ lines nil)
(WHILE (SETQ line (READ-LINE file))
(SETQ lines (CONS line lines))
)
(APPLY 'COMMAND (REVERSE lines))
(command "")
(close file)
)
这个程序只是示例,未加任何错误判断,执行后效果如下:
页:
[1]
2