QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6小时前
全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
查看: 12372|回复: 30
收起左侧

[求助] solidworks宏里自定义的属性,重量如何在赋予材料后自动带出来?

[复制链接]
发表于 2015-7-9 18:19:30 | 显示全部楼层 |阅读模式

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 whoeric 于 2015-7-10 08:53 编辑 ) B; Y; N* Q8 b# `4 t
- |' K6 F5 z, d5 a( k& R! _
最近在网上得到一个宏,修改了一下,符合我们公司的使用习惯,其实就是用来分离零件名称和图号的,用“_"分开,前面部分填入物料编码属性,后面部分填入名称属性。再修改了一下,增加了材料属性,重量属性等,现在材料可以自动从零件赋予材质后,属性自动带出,但重量需要手动,不知道在宏里怎样得到重量。以下是宏的内容:
# o) v" {9 U; N7 F- Z7 X5 q  z& N1 tSub main()& x' P2 m/ U& J& t4 m$ G
'link solidworks+ w- W, b5 c5 S
Set swApp = Application.SldWorks! u2 a5 S+ d8 V& ?/ c3 B& p  o
Set Part = swApp.ActiveDoc& q- r4 @' X: f
Set SelMgr = Part.SelectionManager
0 n# _* g. z! k: a$ ?) V2 WswApp.ActiveDoc.ActiveView.FrameState = 1
2 d. C# u8 |. |5 }# V3 T1 r* I'设定变量
* R/ d( `# V! v! ~4 ]( m% Sc = swApp.ActiveDoc.GetTitle() '零件名3 |" o  W5 k9 b& ]" P7 _4 X$ ~
strmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34)
0 r! _  f- Z4 }7 jblnretval = Part.DeleteCustomInfo2("", "物料编码")0 c! g4 Q. `" @; s0 i+ _: {5 l
blnretval = Part.DeleteCustomInfo2("", "名称")
" _2 v+ u' _, {* O9 `blnretval = Part.DeleteCustomInfo2("", "图号")
1 x# B9 e2 O% f- xblnretval = Part.DeleteCustomInfo2("", "机型")
& J8 ^7 f: w  D0 Bblnretval = Part.DeleteCustomInfo2("", "数量")5 [2 K- f$ \/ N6 J: m
blnretval = Part.DeleteCustomInfo2("", "设计")' L: q. m! M  \7 P' J, E6 L
a = InStr(c, "_") - 1      '重点:分隔标识符,这里是一个空格8 s6 q% x/ I, }8 R/ C
If a > 0 Then5 h" [8 F& k  h1 Z; u. C2 W
    k = Left(c, a)
8 M# }' W8 R( L/ }. e6 L6 q    t = Left(LTrim(e), 3)5 Q( E) g, {5 y
    If t = "GBT" Then
, t: h) ]/ m5 }" q. [. ?* b* E        e = "GB/T" + Mid(k, 4)2 C5 q5 w0 h& f2 B
    Else
& W- h& v3 m0 o' O. M        e = k
' Q, A$ i* y% F# t# a; X6 v    End If
6 b8 s! @5 W. g$ r5 H. p    b = Mid(c, a + 2)3 B$ q& b& @1 X6 o/ T$ t
    t = Right(c, 7)5 l! Y: \  O5 t% K; G2 f0 [. H
    If t = ".SLDPRT" Or t = ".SLDASM" Then
5 ~: w5 y) V( S8 C6 c0 D$ {        j = Len(b) - 7
5 l* e7 S4 J  p8 s( y8 b8 \    Else
. w2 [, W/ j, F* T. @% ~0 R$ c        j = Len(b)7 X# P. [8 I& p3 L) L3 ]! W
    End If' ~  J3 [( j- G* F- ^
    m = Left(b, j)
. O+ W- H7 {: A9 w. y$ K/ @6 `End If9 L" t6 d( m8 J+ v7 o
blnretval = Part.AddCustomInfo3("", "物料编码", swCustomInfoText, e)  '代号% z  \& K6 @3 L
blnretval = Part.AddCustomInfo3("", "名称", swCustomInfoText, m)  '名称
2 t% L' Q4 t' y7 M9 t. _5 fblnretval = Part.AddCustomInfo3("", "图号", swCustomInfoText, " ")0 _7 J, n7 J8 H7 r# C
blnretval = Part.AddCustomInfo3("", "机型", swCustomInfoText, " ")5 P7 p6 x( n. F5 w
blnretval = Part.AddCustomInfo3("", "材料", swCustomInfoText, strmat)- B9 _0 ~9 t" |" h0 p. `: {9 g
blnretval = Part.AddCustomInfo3("", "重量", swCustomInfoText, " ")+ n+ a0 E2 |% R' o$ `2 r
blnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, " ")2 C6 i# A, B+ i, M6 f
blnretval = Part.AddCustomInfo3("", "设计", swCustomInfoText, " ")4 e8 q- d8 K# r, K
End Sub           根据梁大提供的修改方案,已经修改好,下面放出最终版的宏,希望对大家有帮助。自定义属性可以自行修改,分隔符"_"可以根据自己的习惯修改为空格或这个其它符号。再次感谢梁大!
6 j7 v+ v7 d0 u; R1 K) B
9 z9 q. m$ P' N: z, B$ t& ]# M/ H. w: X; _& ?/ t+ \- x$ }! J

  X; P3 X. k) ?; S( o: C) G& x% N( [; [/ V9 I

图号分离(最终版).rar

8.66 KB, 下载次数: 200

评分

参与人数 1三维币 +3 收起 理由
阿帕奇 + 3

查看全部评分

发表于 2015-7-9 20:18:20 | 显示全部楼层
我觉得图号和名称用这个宏自动分离确实不错,至于别的属性,完全可以用属性填写卡来完成,更快捷。当然也不是说楼主的做法有什么不好,毕竟有探索才有进步。
发表于 2015-7-9 20:34:42 | 显示全部楼层
设置好零件模板后。。属性都可以自动出来。。。。做一个宏有点小题大做了
 楼主| 发表于 2015-7-9 20:49:51 | 显示全部楼层
Atropos′ 发表于 2015-7-9 20:34 static/image/common/back.gif7 r: S8 X. e" v8 L
设置好零件模板后。。属性都可以自动出来。。。。做一个宏有点小题大做了
7 m' Y- g9 F8 M+ W# z" k* U1 l
此宏的主要目的不是用来添加自定义属性的,是用来从文件名提取物料编码和名称的,顺便增加了可以添加其他属性的功能。其实还是有作用的,有时用了空白的模板,没有添加自定义属性,这时,就比较方便添加了
发表于 2015-7-9 21:19:30 | 显示全部楼层
whoeric 发表于 2015-7-9 20:49 static/image/common/back.gif
. Y2 j/ c4 d/ |: m此宏的主要目的不是用来添加自定义属性的,是用来从文件名提取物料编码和名称的,顺便增加了可以添加其他 ...
- E. i5 g0 N! G! N# _9 T. Y  G
“有时用了空白的模板”,楼主,您日常的工作是有多漫不经心?/ j; X7 Y3 ~+ A6 X
从文件名提取名称和编码,这个用宏是没错的。# [, l/ c1 |; r) o+ G  B
添加其他属性用模板可以完全解决,没有必要与宏扯上关系。3 v! z/ j5 d. S( g$ x5 q, j* V
 楼主| 发表于 2015-7-9 21:37:11 | 显示全部楼层
Atropos′ 发表于 2015-7-9 21:19 static/image/common/back.gif2 j6 q! M3 {7 b: r% ^1 L5 o
“有时用了空白的模板”,楼主,您日常的工作是有多漫不经心?
0 I8 u6 {9 m+ w: p! x& x! S从文件名提取名称和编码,这个用宏是没错 ...
9 f; Y% c. q- c! K9 |; V/ G
不要动不动一副教训人的架子,多一个功能有什么不好吗,你有本事解决了,我也是佩服你的,解决不了,你看着就行
发表于 2015-7-9 21:50:03 | 显示全部楼层
新增重量,1#原檔修改如圖示/ X( x; }+ ~3 o- f3 S
strmass = Chr(34) + Trim("SW-Mass" + "@") + c + Chr(34) '定義重量變數(複製用的)5 h1 w" b$ Y  \  i

! ?/ a+ I. S/ I2 i, T  [2 b; ^/ h, B7 D
3.png

评分

参与人数 1三维币 +3 收起 理由
阿帕奇 + 3

查看全部评分

 楼主| 发表于 2015-7-9 21:52:09 | 显示全部楼层
本帖最后由 whoeric 于 2015-7-9 22:07 编辑
! v3 _  g3 U2 ?2 k# P; i
ryouss 发表于 2015-7-9 21:50 static/image/common/back.gif
( S7 s, f  ^0 ?+ F$ R" s新增重量,1#原檔修改如圖示! b6 u7 _# e3 N' S, b
strmass = Chr(34) + Trim("SW-Mass" + "@") + c + Chr(34) '定義重量變數(複製 ...
; K2 S6 ?: v0 I. ]
非常感谢royouss,论坛高手总是能真正解决问题的,万分感谢!

点评

客氣了!  发表于 2015-7-9 21:56
 楼主| 发表于 2015-7-10 08:46:34 | 显示全部楼层
现在对我来说,很完美了。这个宏可以从文件名称中提取物料编码和名称分别填入自定义的属性里,并且增加其他相关属性。如图,1是运行宏之前,2是运行宏之后。
$ F3 O4 r5 u% e6 L

运行宏前

运行宏前

运行宏之后

运行宏之后
发表于 2015-7-10 11:48:17 | 显示全部楼层
问题解决了就OK!!!!!
发表于 2015-7-10 21:32:52 | 显示全部楼层
whoeric 发表于 2015-7-10 08:46 static/image/common/back.gif
. x4 j1 e& T$ E! j9 R" v5 y现在对我来说,很完美了。这个宏可以从文件名称中提取物料编码和名称分别填入自定义的属性里,并且增加其他 ...
0 d+ f5 s+ ?. P" Q+ o$ f
高人,你能把这些属性添加到“配置特定”选项卡里么?

点评

參看13#  发表于 2015-7-11 17:07
N大有關 “配置特定” 尚沒搞定?  发表于 2015-7-10 21:44
发表于 2015-7-11 09:28:58 | 显示全部楼层
whoeric 发表于 2015-7-10 08:46 static/image/common/back.gif% {8 o, m6 F  j% G7 d7 G, @$ N0 e
现在对我来说,很完美了。这个宏可以从文件名称中提取物料编码和名称分别填入自定义的属性里,并且增加其他 ...

5 b0 U9 }* ]# j$ T; {1 O6 _改成了分离编码和名称了,图号空出来了
发表于 2015-7-11 17:07:12 | 显示全部楼层
本帖最后由 ryouss 于 2015-7-11 19:08 编辑 3 }1 _8 Y( x- a5 w4 c

* l/ G! w& a$ d5 r1 |; t回11#之需求   属性添加到“配置特定”4 E" ^% k% Q, Q% i" e) W( {! P
條件是依原樓主之格式. w3 l- w( e9 h/ Q
把對應的屬性欄名 " 英文名稱 " 自行修改為 " 簡體字 "
( F& o+ v* W; }  X; g- p) ^0 ?9 G! h
1.png ; b( f$ D- p# D, p- F1 i3 q

6 n, i4 ?8 {) b! C/ P5 j( \+ H 2h.png
0 e; U' m6 ^- y. _+ C. ^" i% x/ d  J
test0711 - configure specific.rar (12.67 KB, 下载次数: 55)

评分

参与人数 1三维币 +3 收起 理由
阿帕奇 + 3

查看全部评分

发表于 2015-7-11 21:20:03 | 显示全部楼层
ryouss 发表于 2015-7-11 17:07 static/image/common/back.gif) Z9 p8 Q) Z9 F9 T$ }/ _
回11#之需求   属性添加到“配置特定”; J% R/ x: n2 f" F
條件是依原樓主之格式
' G- ?, G% }0 z0 x: z% ]" \- R- ^把對應的屬性欄名 " 英文名稱 " 自行修改為 ...

' O0 y+ V2 [' [) d谢谢梁大。正好我用的也是SW2012,我试下。
发表于 2015-7-11 21:58:09 | 显示全部楼层
ryouss 发表于 2015-7-11 17:07 static/image/common/back.gif/ ?) B; v; @* f* j
回11#之需求   属性添加到“配置特定”
" d& A$ T  ], N- s3 G6 r& D8 I條件是依原樓主之格式
/ J# Z( M8 e, S/ J- P& }把對應的屬性欄名 " 英文名稱 " 自行修改為 ...

& J5 y6 R7 a7 H* Y% l梁大,我这里测试,属性是添加到了配置特定栏,但是读不出零件材质和重量。我的宏文件写入的代码是"SW-Material@19870105_测试用零件",没有自动添加文件后缀名。我把strmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34)这一行代码改成strmat = Chr(34) + Trim("SW-Material" + "@") + c + ".sldprt" + Chr(34)后就可以读取到零件材质了,不知道为何您在执行代码时不用添加 ".sldprt" 这一小段内容就能在填入属性时识别零件名后缀我的却不行?恳请指点。谢谢

点评

參看17#  发表于 2015-7-12 07:38
发表于 2015-7-11 22:24:01 | 显示全部楼层
NC@jiang@nan 发表于 2015-7-11 21:58 static/image/common/back.gif5 m" F- c! g+ N9 o
梁大,我这里测试,属性是添加到了配置特定栏,但是读不出零件材质和重量。我的宏文件写入的代码是"SW-Ma ...

' ^% H8 R/ {+ \2 O, W, @2 h如圖所示+ c% B" x8 k' U+ o. {# O
1 X* ~3 a# R: k9 l! W! j! A

0 [7 i( \! q% S( f$ z YY-1.png
发表于 2015-7-12 01:24:38 | 显示全部楼层
NC@jiang@nan 发表于 2015-7-11 21:58 static/image/common/back.gif0 a/ I# @2 y7 U: N
梁大,我这里测试,属性是添加到了配置特定栏,但是读不出零件材质和重量。我的宏文件写入的代码是"SW-Ma ...

/ j6 x& ?1 \+ y% ]2 l找到問題點了!( x* _. t4 a( x# B$ q" W
須把WIN作業平台的"文件總管"里,有 "隱藏副檔名" 的設定打勾取消.% o3 N5 N  m+ W
就是 隱藏了副檔名 C變數才抓不到 .SLDPRT 的副檔名.4 P0 t; L$ r& ]% `0 n1 a& U) F
% h+ R5 b) K! L8 U; q; A: z
操作如圖示
+ H9 Y& X" v( P5 M9 I* L* P2 p, S# V$ V
9 M: {% u. B% ?$ Z2 G2 R7 e$ R
PPP-1.png
发表于 2015-7-12 23:14:23 | 显示全部楼层
ryouss 发表于 2015-7-12 01:24 static/image/common/back.gif
' o. D6 b. H, s  S1 ?找到問題點了!1 I- w$ A# l' b( B2 n7 c5 I) C
須把WIN作業平台的"文件總管"里,有 "隱藏副檔名" 的設定打勾取消.
4 p& P* ?& P7 ]* q- J; m就是 隱藏了副檔名 C變 ...

7 a" `, n' E0 P- a0 W" O8 _* {嗯,我估计也是这个问题。我的个人习惯是不显示已知文件的扩展名。看来只能用我修改的那个方法对付着用了。
1 \* V4 `) [! _0 s谢谢梁大回复指点。

点评

不謝了,能解決就好!  发表于 2015-7-12 23:58
发表于 2016-1-13 10:38:37 | 显示全部楼层
讨论得很精彩,但若要实现“配置名称”图号分离,请问这个也能实现吗?
发表于 2016-11-9 22:02:30 | 显示全部楼层
仔细研究了这个帖子,不知变量e的初始值是什么?不知哪位能在百忙中抽空解答一下?谢谢!
发表于 2018-7-29 18:39:45 | 显示全部楼层
十分感谢楼主,真的是省了很多麻烦,谢谢
发表于 2019-3-13 18:11:05 | 显示全部楼层
ryouss 发表于 2015-7-11 22:24' A% Y# b( v6 }6 H
如圖所示

) O* S, m- V% I' ~$ Y& N'设定变量
! N& q- [  C* C* p8 vc = swApp.ActiveDoc.GetTitle() '获取零件名3 B+ V, T; e- z0 l/ N+ D" T$ x
2 @& y0 h1 T3 A0 F+ f/ v6 d; d
strmat = Chr(34) + Trim("SW-Material" + "@") + c + ".SLDPRT" + Chr(34): k9 E. S( @  }( @
strmas = Chr(34) + Trim("SW-Mass" + "@") + c + ".SLDPRT" + Chr(34)$ E! W  e9 J; G3 W9 V" ^
9 a* J1 n9 T( j1 K  B
能否增加 If 语句,区分开装配体和零件尾缀(扩展名)的抓取,请大师赐教。( K7 i6 v3 A1 G# Y9 g& ^; W" K+ \

1 q! N4 h/ d$ H) d% h'tempvalue = Part.CustomInfo2("", "材料")% e4 d8 o9 i+ z2 v1 _+ }
blnretval = Part.DeleteCustomInfo2("", "代号")
' I% h* C9 W, h+ K$ qblnretval = Part.DeleteCustomInfo2("", "名称")
$ h5 |; j0 v" Kblnretval = Part.DeleteCustomInfo2("", "材料")4 Y7 P' B# ?) Q# n' y' U/ j
blnretval = Part.DeleteCustomInfo2("", "质量")

点评

应该可以用 if gettype = 1 then elseif gettype =2 then end if 代码来分别操作零件和装配体吧。好几年没研究这个东西了又生疏了,惭愧,惭愧。  详情 回复 发表于 2019-6-29 01:36
发表于 2019-4-15 14:34:01 | 显示全部楼层
最近大神也不来了。
发表于 2019-6-25 09:33:52 | 显示全部楼层
每天都在等大神来..............
发表于 2019-6-29 01:36:43 | 显示全部楼层
wyz182 发表于 2019-3-13 18:11* T& |8 L8 z- A- f) D
'设定变量1 ^5 F9 ^6 P, M6 e% w( u# M2 k
c = swApp.ActiveDoc.GetTitle() '获取零件名
% k: i' Q" q; Y7 k0 l  E
应该可以用 if gettype = 1 then
7 j7 _% ~! Y" ^8 Q6 Q elseif gettype =2 then
9 m- @& _8 l$ c: oend if 代码来分别操作零件和装配体吧。好几年没研究这个东西了又生疏了,惭愧,惭愧。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备13008828号-1 )

快速回复 返回顶部 返回列表