机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5075|回复: 13

求助,如何用代码添加全局变量?

[复制链接]
发表于 2022-5-9 15:56:42 | 显示全部楼层 |阅读模式
如下图片,如何用代码实现添加全局变量:A2="名称"? 其中”名称”是自定义属性。! g+ K1 e# J- r7 \/ B5 X7 f  F' k

6 z3 @9 U8 N0 P+ _, _. S6 i: o+ G; ]" j) k* y, W* I. c

/ x: ]  a2 Y& ], ?# W

本帖子中包含更多资源

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

x

评分

参与人数 1威望 +1 收起 理由
喂我袋盐 + 1 热心助人,专业精湛!

查看全部评分

回复

使用道具 举报

发表于 2022-5-10 08:16:25 | 显示全部楼层
首先,方程式只能是数值,这很重要。
0 i# a) |/ `, e; R7 q  Z那么,你自定义属性也得整个数值的,就简单了。
回复 支持 反对

使用道具 举报

发表于 2022-5-10 08:26:43 | 显示全部楼层

& w3 [' f6 `. k$ K

本帖子中包含更多资源

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

x

点评

全局变量的“值”是数值,用代码可以自动添加。但是,变量的值引用自定义属性里面的名称字段,用代码没搞出来。  发表于 2022-5-11 14:34
变量的“值”一定要是数值,这很重要。至于你说“值”是文字型的,我觉得对于会二次开发的,也都不是事。毕竟汉字,字符对于计算机来说,都是数值。提取数值,再通过某种方式转换回去,肯定可以做到一一对应。  发表于 2022-5-10 08:55
属性那里选数值不是必须的,你那里选文字,然后后边栏里填个数。方程式那边引用这一项属性,出来的还是个数,不影响。 楼主是想用方程式引用具体的文字数据,那确实不可能  发表于 2022-5-10 08:37
回复 支持 反对

使用道具 举报

发表于 2022-5-10 09:36:00 | 显示全部楼层
你的目的是什么呢?自定义属性可以直接用代码Part.CustomInfo2("", "名称")赋值
回复 支持 反对

使用道具 举报

发表于 2022-5-10 10:10:14 | 显示全部楼层
方程式只支持纯数值的自定义属性调用,如果调用自定义属性的文本值直接在属性调用即可
0 M9 `/ s* W  j' y% Z1 Y8 D如图:) t; q' n2 j: F0 G0 R* _  R

( T) \0 j1 F& ^) }, M8 A
  u# A6 E; {$ A7 S# \9 k  ^7 b

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 11:05:30 | 显示全部楼层

$ ]9 v) r- K7 f. ?; i+ y0 h0 u9 H7 q我的主要问题是如何用宏代码实现自动添加?
/ U  F/ |# W5 j7 A0 C, ^
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 16:41:34 | 显示全部楼层
swapi 自带的例子,swEquationMgr.Add3 有错?. T& n& ]: @& p* R* D, g
例子如下:- X+ a+ |: X: k- E; `7 h
Option Explicit+ E! H  o7 V$ h8 q
Sub main()8 e% J8 ?! u4 `1 J
7 i- V% f+ {) O: d- N# I
    Dim SwApp           As SldWorks.SldWorks
7 C# e3 D+ i) B4 A) I# e/ i4 O. J( ~4 e    Dim Part            As SldWorks.ModelDoc2; T% [0 D6 _- c8 ]0 J
    Dim swEquationMgr   As SldWorks.EquationMgr  ^; D/ r' L1 s1 O, \/ X  R
    Dim longEquation    As Long' o& V$ t  h. i
/ x5 u( Z8 e0 Z, E/ n- p1 @% f% q
  w7 b7 v7 f5 S1 ]
    Set SwApp = Application.SldWorks
0 g) i% M" d) y7 u4 g    Set Part = SwApp.ActiveDoc
" ?; I2 v1 p1 v9 y! o! F3 y4 t" h7 Q, M* P
    Set swEquationMgr = Part.GetEquationMgr
3 j4 q4 R  S) I6 P1 J    If swEquationMgr Is Nothing Then ErrorMsg SwApp, "Failed to get the equation manager"8 |. R+ j! \6 m. e

) c0 Y5 e1 B4 E1 c0 N6 ~+ _6 H
! F+ o, J+ t. k* Q+ F    'Add a global variable assignment at index, 0, to all configurations0 B# s7 l( e, P
    longEquation = swEquationMgr.Add3(0, """A"" = 2in", True, swAllConfiguration, Empty)
5 ^9 Y* R1 K1 o0 \: E    If longEquation <> 0 Then ErrorMsg SwApp, "Failed to add a global variable assignment"
% Z% B) M  y& g- @) m4 B( \3 j9 v# L- F1 i2 A7 P' K2 [# h
1 A0 r4 v8 }! }$ q5 p/ q
    'Add a dimension equation at index, 1, to all configurations
, _1 L' e' l! i1 M3 K    longEquation = swEquationMgr.Add3(1, """D1@Boss-Extrude1"" = 0.05in", True, swAllConfiguration, Empty)4 T' i8 [0 n9 K% V* L2 y. D
    If longEquation <> 1 Then ErrorMsg SwApp, "Failed to add a dimension equation"' g4 K1 C- E% |* F: ]. J$ M
9 x5 q1 _5 d7 S( ~. q

1 S: x' M0 Q% h) z& b    'Modify dimension equation at index, 1, in all configurations, f* G8 q; n1 v" U1 Z9 V, p
    longEquation = swEquationMgr.SetEquationAndConfigurationOption(1, """D1@Boss-Extrude1"" = 0.07in", swAllConfiguration, Empty)# |0 \7 f1 B: B9 X. k
    If longEquation <> 1 Then ErrorMsg SwApp, "Failed to modify a dimension equation"/ g) T3 ^/ ^! T, y. m

' O' \2 N$ w+ [: x- X/ b" d4 E9 T9 U6 L2 c( D

& i7 J& s+ y' B+ _End Sub+ F5 c6 ^, x2 T, U
0 s7 U# o! _- v5 u4 ]" p

! U& q0 M+ j8 k  m+ z" ^Function ErrorMsg(SwApp As Object, Message As String)+ z9 i  O6 }6 I" G4 w
    SwApp.SendMsgToUser2 Message, 0, 0# a$ m- _# W6 c: v. y+ l7 O2 }2 {
    SwApp.RecordLine "'*** WARNING - General"
7 ^* T4 @6 Q; {" I    SwApp.RecordLine "'*** " & Message
% W' {' u" f- _6 i* J    SwApp.RecordLine """ W7 w: E! X" k3 Y
End Function9 }/ @% K/ T  m* c* ?, A

, O3 T0 c6 b. z9 \' `  |( h; }; E
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-24 13:53:29 | 显示全部楼层
自定义属性内嵌宏代码:图号代码:    "Part.Extension.CustomPropertyManager("").Set("drawingN",Left(Part.GetTitle, InStr(Part.GetTitle, " ")-1)); d% E2 V* C5 ]4 e7 [
名称代码:     Part.Extension.CustomPropertyManager("").Set("partN",Right(Part.GetTitle, Len(Part.GetTitle)-InStr(Part.GetTitle," ")))
- }- j  n7 W8 ~drawingN:! t" h9 Y( A/ D! w, J) [
partN:   
. o# o  J3 ]6 V, M3 J% ^1 I$ o- O' x/ S
0 S2 I6 M- z* l' x) A7 `5 o( z
方程式: 目前只能手动
4 D5 R8 i) S6 \A1="图号代码"
" ]- q( s- y6 l) J- ~2 wA2="名称代码"
  f0 A+ f. S6 u$ h. U

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-22 14:43:18 | 显示全部楼层
Dim swApp As Object/ j6 I" p" s, ]& Q! ]
Sub main(): }  K- t9 C7 I

% K. @; R" T/ q: k% B. ^4 ?, xSet swApp = Application.SldWorks
4 A, U% I0 Y  y( w  F7 L' |
4 l1 m2 E& k! f2 Z$ }Set doc = swApp.ActiveDoc
3 N+ p* o4 J- G3 D6 ?0 d  For Each an In doc.GetCustomInfoNames   '删除所有自定义属性
2 S+ J6 ?2 E: M; m( R. _   doc.DeleteCustomInfo an
) D8 E$ c0 K( p, U: X) b# d  Next
2 L. M2 P/ e1 c5 E9 X  }7 G. ^Dim ST, SG As String
- L; |' o" a6 z( d- }, ^) |0 {      ST = ""
$ e6 j" c3 |3 W6 y. O' n      SG = ""
: o  y6 ^! p; p% v0 q* S    If doc.GetType = 1 Then '零件图0 F; ?2 N  X2 W, E" \
1 V& j6 D4 {6 v' W8 u
       ST = "Part.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "图号" + Chr(34) + _
' q/ G4 P$ ~/ ~6 i0 F$ E$ R5 Y( ?" o             ",Left" + Chr(40) + "Part.GetTitle, InStr" + Chr(40) + "Part.GetTitle, " + Chr(34) + " " + Chr(34) + Chr(41) + "-1" + Chr(41) + Chr(41)
9 B2 T0 `" X% e8 x1 ~
2 S+ Q6 X2 {/ z. Y9 o       SG = "Part.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "名称" + Chr(34) + ",Right" + _
' N& t) ]2 z5 M7 a2 @/ p8 N             Chr(40) + "Part.GetTitle, Len" + Chr(40) + "Part.GetTitle" + Chr(41) + "-InStr" + Chr(40) + "Part.GetTitle," + Chr(34) + " " + Chr(34) + Chr(41) + Chr(41) + Chr(41)
) D% t+ Z& p9 {      
( v2 e0 U/ N& q" {' U/ {: C    ElseIf doc.GetType = 2 Then '装配体# d' d( [3 R/ X: T: k
        i) F- h6 O. v5 a0 Y1 v- l
       ST = "Assembly.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "图号" + Chr(34) + _
& X- I# Y* `( s, q          ",Left" + Chr(40) + "Assembly.GetTitle, InStr" + Chr(40) + "Assembly.GetTitle, " + Chr(34) + " " + Chr(34) + Chr(41) + "-1" + Chr(41) + Chr(41)8 M# ]* a3 W5 P  w3 s& I

3 h( B: p  {- H5 s       SG = "Assembly.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "名称" + Chr(34) + ",Right" + _! U: b+ N1 c8 m2 C; F& k/ g
           Chr(40) + "Assembly.GetTitle, Len" + Chr(40) + "Assembly.GetTitle" + Chr(41) + "-InStr" + Chr(40) + "Assembly.GetTitle," + Chr(34) + " " + Chr(34) + Chr(41) + Chr(41) + Chr(41)
0 t# o" i, `' N: o$ w/ K6 m' }* Y( s" @     End If% b+ c; D! M/ x6 w/ r9 ~& e
      doc.AddCustomInfo3 "", "图号", swCustomInfoText, ""
8 h6 n% f4 _5 v" y1 o, g      doc.AddCustomInfo3 "", "名称", swCustomInfoText, ""+ d" `& v/ c8 j4 J/ x1 ^  A
      doc.AddCustomInfo3 "", "图号代码", swCustomInfoText, ST
- ]+ r0 T8 ~0 z# X+ }3 e      doc.AddCustomInfo3 "", "名称代码", swCustomInfoText, SG
% A4 Q9 E  @7 g% s: ~5 \( r+ X: j& }& U7 e* r! E2 e3 \7 [9 H
      Set swEquationMgr = doc.GetEquationMgr
% m  p' x1 o6 K4 a5 o# Z1 T3 n' P      swEquationMgr.Add 0, Chr(34) + "A1" + Chr(34) + "=" + Chr(34) + "名称代码" + Chr(34) '添加方程式---"A1"="名称代码"5 f( D5 y0 Z9 a) L' |+ D6 R
      swEquationMgr.Add 0, Chr(34) + "A2" + Chr(34) + "=" + Chr(34) + "图号代码" + Chr(34) '添加方程式---"A2"="图号代码"
! [; _& {+ t% V- F+ P, y9 z6 P! b: Y0 w4 k
2 n2 F" B+ s7 A# N5 f
End Sub
. Q$ q, |! }( c" W9 W

点评

名称规则:图号+空格+名称  发表于 2023-2-22 14:45
可以在模型树直接改名,并更新到相关自定义属性里了  发表于 2023-2-22 14:44
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-2-25 03:09 , Processed in 0.068551 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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