![]() |
【转帖】基于vb的sw二次开发,从txt中输入点
基于vb的sw二次开发,从txt中输入点
www.dimcax.com 我要从txt中读取点云数据的三维坐标值,并输入到solidworks中绘成点, $ b2 p$ g- n; p8 _ c其中txt格式为多行,每行三个数字值,分别表示x,y和z坐标;& u4 t& q( z8 h. [, l 比如text3的内容如下(共12行): % d% a5 b; n5 z$ g# c33.4391 -13.80677 -18.66343& j8 g n& _7 y, b1 u7 f5 s: } 33.1812 -13.80677 -18.89947 ) g9 o! d y, `! z6 }! m32.71694 -13.80677 -19.27025# x7 q$ {; y- g7 b6 z: ^ 32.47022 -13.80677 -19.45361: a4 k; o' a; n/ t 32.22339 -13.80677 -19.631 d+ v. s3 p' @0 |) o7 k. u 31.97611 -13.80677 -19.78291. u/ u3 s& |3 y8 e 31.72859 -13.80677 -19.9218" w9 g l4 v& c9 v! ]) n 31.48109 -13.80677 -20.06222 4 {* r: d3 r7 f8 [" l31.23331 -13.80677 -20.18699 . ] n0 `" l0 e% y' h. \30.98543 -13.80677 -20.306783 v3 e3 m w6 g) ~ 30.73736 -13.80677 -20.41619- r4 f! r) t. s0 } 30.48906 -13.80677 -20.51301 我vb的编程是这样的: , j' i6 `- x4 n( h# e5 r" _dim swapp as object 6 ]5 \5 i: ^1 u% t; w. x" m! h; [dim filename as variant5 x! @* c( y1 m6 ]* x5 b dim part as object8 k) j# u$ p2 u) }4 ] / i2 v( c! f3 e7 @ sub main() , z$ h w2 b: i % b$ `4 q* z. d dim textline as variant1 l6 v7 d0 ^4 x& q- ~* q7 d% ` set swapp = application.sldworks" r i( b& e) t# t set part = swapp.activedoc - d1 o4 v. t; |3 [ 9 u7 r3 s; j# f7 \ dim x as double6 n {, i3 i3 n' h8 v& ` dim y as double( r- `0 a9 r! x1 c! d0 g: i9 l dim z as double 0 g% ^- ^6 ~8 f2 l+ o% g ' z) b" a8 `! s '读取txt数据,并进入绘图模式 5 z$ u: n1 n. x+ r& @8 ^/ o ` open "f:\study\sw-ercikaifa\test\test3.txt" for input as #1 2 c' ?, w3 m4 n part.insertsketch2 true 9 q1 `4 ]1 [' o5 p& t7 u '逐行得出字符串格式,分割行数据,拆分成三个数字( u. t& r' j- u5 }6 ]9 r do while not eof(1)+ l5 w7 j+ ^( a9 ?9 { line input #1, textline; b7 k5 b$ f. i5 z4 b% ?4 g( { dim point as variant - h) t) ?% y% m: f6 i; n) v point = split(textline, " ") 6 i7 i$ t$ t& i/ j; s6 x0 c x = val(point(0)) / 1000 " ^8 s1 b0 a) y6 c6 z y = val(point(1)) / 1000 # a& y, e' a9 k% q4 m z = val(point(2)) / 10004 l/ g0 u) i' n0 d7 ~ part.createpoint2 x, y, z& b2 p/ w! z4 l& z1 g( y; c' u6 {& s part.clearselection2 true x+ t" c) ^0 @0 k( ~ part.setpickmode8 v# e% v8 b5 v3 @. f6 b loop1 b. t- ]0 m8 g. v7 ^+ [6 g+ e close #1 ) y. j7 | q; lend sub 0 r/ r( g/ b% g( y% \3 }* t1 g( y- r. w. v4 `+ s 运行时发现,最终只绘出5个点而不是12个点! 3 m2 a9 p; c1 i$ ^/ n) j1 y3 t不知道出了什么问题。 6 m# o+ }! u r$ m2 v小弟是个vb新手,调试时发现x,y,z的值实时也发生了变化;# \6 {0 \0 ]7 `. y# ]. j 但sw环境中却会出现跳一行才绘点的情况(即每两行只绘一个点),7 g4 z: r g$ w9 z) v7 _6 l 为什么会出现漏点的情况呢?费解呀,亲娘来...... 补充一下:" ]& h$ u. ?* c; o* {( o 今天上午我换了一台电脑调试,+ c- ~# p, z# p) g a8 x4 j 却发现可以实现, . x( x/ {, a) m; n( b2 h! y回来后用自己机器却还是错误(漏点), 0 ~0 b t. d. o( t# z同一段代码,为什么在两台机器上会运行出不同的结果? 怎么没人回我呢?* o2 u# i- a# y: c 我今天好像找到了个解决的办法,将4 y( p2 `' t- q, u" ` insertsketch2 true 改为insert3dsketch,问题暂时就没有了。/ |3 p+ j% d0 e8 k 不知道以后还会不会出现这个问题。 |
| 所有的时间均为北京时间。 现在的时间是 05:43 PM. |