找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5770|回复: 13

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

[复制链接]
发表于 2022-5-9 15:56:42 | 显示全部楼层 |阅读模式
如下图片,如何用代码实现添加全局变量:A2="名称"? 其中”名称”是自定义属性。! r# S( U# ^- B7 j$ N6 P- |
0 c- b1 z- p8 z' i: a

' x& H% ^2 p. L% F9 e* t& G
  c6 O1 Z* K/ Q' ]7 Z! n

本帖子中包含更多资源

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

×

评分

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

查看全部评分

回复

使用道具 举报

发表于 2022-5-10 08:16:25 | 显示全部楼层
首先,方程式只能是数值,这很重要。
- U8 t/ j; f2 t% D+ T2 d/ ?那么,你自定义属性也得整个数值的,就简单了。
发表于 2022-5-10 08:26:43 | 显示全部楼层
' o" d8 Z0 r# o! w% M  k% ?/ w

本帖子中包含更多资源

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

×

点评

全局变量的“值”是数值,用代码可以自动添加。但是,变量的值引用自定义属性里面的名称字段,用代码没搞出来。  发表于 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 | 显示全部楼层
方程式只支持纯数值的自定义属性调用,如果调用自定义属性的文本值直接在属性调用即可7 Y) A' C3 ?) j0 Y$ \
如图:  ^- V  i( w, d, z/ R9 N* B
+ r( ~# t5 Q" b6 c: R1 O
2 \& S, ]7 r* s6 Y7 f6 t

本帖子中包含更多资源

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

×
 楼主| 发表于 2022-5-11 11:05:30 | 显示全部楼层
% {" o5 J& Z# |4 j2 H
我的主要问题是如何用宏代码实现自动添加?3 v" B& R. J, J2 z6 Q0 g
 楼主| 发表于 2022-5-11 16:41:34 | 显示全部楼层
swapi 自带的例子,swEquationMgr.Add3 有错?$ O' j7 Q& `: d# l: e
例子如下:7 R+ o# q9 Q$ [8 h  C$ S
Option Explicit4 S5 p+ Y" @9 Y' o0 ~. t
Sub main()
) H: s$ G! S5 _2 H4 @. G* _! e
# k. C: R3 a+ m3 O% T- f, e/ O1 s+ C    Dim SwApp           As SldWorks.SldWorks
" P) n* Q9 o. h3 Q; E, f5 h0 f$ t    Dim Part            As SldWorks.ModelDoc2
$ z7 ?$ M* {9 y8 w8 [  b, `) K    Dim swEquationMgr   As SldWorks.EquationMgr
" s6 c. e7 Y. X+ h1 C  Z    Dim longEquation    As Long
' {* _% H6 [$ T# Y; ]3 [* C9 Z$ ^0 T8 P6 o+ M

/ e: c" ~# h1 @- K    Set SwApp = Application.SldWorks
2 L  L# B4 x3 n    Set Part = SwApp.ActiveDoc
' T7 G2 H& G* S8 f
8 b) n6 E+ y! z& I5 r" J  S- }2 |    Set swEquationMgr = Part.GetEquationMgr
* v- Z, V2 |# @. \6 V    If swEquationMgr Is Nothing Then ErrorMsg SwApp, "Failed to get the equation manager"
3 |. C+ _3 E: S( y4 D0 n4 \7 u% y. O7 w1 G7 T

/ [' n5 x& [5 Y4 e0 K4 I& }" s    'Add a global variable assignment at index, 0, to all configurations
) b7 _+ u. _2 h+ Q/ S    longEquation = swEquationMgr.Add3(0, """A"" = 2in", True, swAllConfiguration, Empty)* F* v- V% {6 g
    If longEquation <> 0 Then ErrorMsg SwApp, "Failed to add a global variable assignment"8 k. o4 V& [& d" r' q+ n, ]
' n+ r' w" u) |3 y% o3 O3 i

9 \8 b( a, L0 E    'Add a dimension equation at index, 1, to all configurations; c" H, ~4 K/ a# ?3 i9 G- A
    longEquation = swEquationMgr.Add3(1, """D1@Boss-Extrude1"" = 0.05in", True, swAllConfiguration, Empty)6 W6 x; Q: Y7 C- z/ }/ j8 w( c
    If longEquation <> 1 Then ErrorMsg SwApp, "Failed to add a dimension equation"
$ ^6 `7 c" e: X2 t
5 D/ m' J* Z* t  @0 U
3 u8 K2 f0 l& k' _' ]- l    'Modify dimension equation at index, 1, in all configurations1 o" `) ?9 O! z+ ]9 g
    longEquation = swEquationMgr.SetEquationAndConfigurationOption(1, """D1@Boss-Extrude1"" = 0.07in", swAllConfiguration, Empty)  J. f/ E) p6 h! E3 C; Z
    If longEquation <> 1 Then ErrorMsg SwApp, "Failed to modify a dimension equation"& A6 g- V& P( M/ z, H" a
5 W% b- l0 g+ ^( a0 M

3 D. e( t9 {) D
3 F+ Q- R1 g9 O$ t$ }$ R& mEnd Sub
# J' p: g, R, V$ d9 }+ j" @
- e# J0 H# P$ N( W: z( a
8 K& h" Z# L6 }4 BFunction ErrorMsg(SwApp As Object, Message As String)5 v9 [. H, E8 L! U: J/ X: c
    SwApp.SendMsgToUser2 Message, 0, 0+ ^& S( Y; K3 D
    SwApp.RecordLine "'*** WARNING - General": W$ _, e5 k& }. Z3 X: a
    SwApp.RecordLine "'*** " & Message' w7 g1 K4 J5 f5 r7 p5 E9 Q* z
    SwApp.RecordLine ""
2 d4 N$ s" M+ k6 F1 HEnd Function! n5 C. p" U+ Z
' k4 b. b( V% Y' @
 楼主| 发表于 2022-5-24 13:53:29 | 显示全部楼层
自定义属性内嵌宏代码:图号代码:    "Part.Extension.CustomPropertyManager("").Set("drawingN",Left(Part.GetTitle, InStr(Part.GetTitle, " ")-1))& t4 ^0 O8 }$ I! V
名称代码:     Part.Extension.CustomPropertyManager("").Set("partN",Right(Part.GetTitle, Len(Part.GetTitle)-InStr(Part.GetTitle," "))); P$ t+ l( w, \# C) x0 u( b
drawingN:: @/ A6 |# t( q" U5 [% e2 |
partN:   
6 ~; C: v: Q" g* N) o  n4 \
* K  d. y- H  G/ e$ c$ H4 d  X6 A, Q
方程式: 目前只能手动
. }) F  X$ I1 Z" Q/ c2 J& wA1="图号代码"
1 r9 q4 o3 [" [  m: b- AA2="名称代码"
, ]* z3 r, R8 f0 m4 v

本帖子中包含更多资源

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

×
 楼主| 发表于 2023-2-22 14:43:18 | 显示全部楼层
Dim swApp As Object
+ n( B* r/ ~1 L( USub main()
' q7 I/ ?) a$ i+ d: Q. b7 {* V
2 o0 I* ^2 }" S6 ]6 s  L  T3 iSet swApp = Application.SldWorks
% M0 _- A0 M/ ], Q' j- R  ~# o) X7 |  O; `# [" R
Set doc = swApp.ActiveDoc
  L1 L9 `$ F4 j7 r& w" O3 Q  For Each an In doc.GetCustomInfoNames   '删除所有自定义属性
& z  h6 E, G0 V) o  x$ R8 Q6 w$ |   doc.DeleteCustomInfo an1 @  y) I' C1 k" Y& I
  Next5 s8 d; Q; ]6 m( |3 V
Dim ST, SG As String
9 d- `7 k# l, F0 a      ST = ""
0 @. F3 ?) j& M$ n6 X3 D- F7 p      SG = ""; W2 Z- b, B# D* J! s9 R$ T" [- b
    If doc.GetType = 1 Then '零件图
$ e( Q. k( k5 j- J8 ^9 k7 ?7 L' [. m. l' H. x- ~
       ST = "Part.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "图号" + Chr(34) + _" M4 j: o) B  |' P" m+ d# @! G$ H
             ",Left" + Chr(40) + "Part.GetTitle, InStr" + Chr(40) + "Part.GetTitle, " + Chr(34) + " " + Chr(34) + Chr(41) + "-1" + Chr(41) + Chr(41)
8 o1 S% v& x, M6 T6 l! O1 E; r1 |. g6 z# O# j
       SG = "Part.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "名称" + Chr(34) + ",Right" + _0 |$ W* s! n1 ]' U- t+ c3 P" j
             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)
% H5 c: ?9 M% R+ Z1 V  H5 W      
( o7 o) T) Y+ S! G: \    ElseIf doc.GetType = 2 Then '装配体
. z; v1 k  h6 b! N      
$ T9 W! E7 F+ p7 t! ?5 z# h       ST = "Assembly.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "图号" + Chr(34) + _
1 g2 A$ j; E! G' v% _# e; {+ l          ",Left" + Chr(40) + "Assembly.GetTitle, InStr" + Chr(40) + "Assembly.GetTitle, " + Chr(34) + " " + Chr(34) + Chr(41) + "-1" + Chr(41) + Chr(41)
* M5 H8 c2 Y# L( `: }
% J4 @3 [" i+ ^/ B- r       SG = "Assembly.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "名称" + Chr(34) + ",Right" + _
) Y' {2 M6 j1 u+ w6 m6 A* G. G, i. n: x           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)$ \$ \3 r  R. @/ x; I/ x
     End If3 `8 S# D' t9 y
      doc.AddCustomInfo3 "", "图号", swCustomInfoText, ""+ b" Z9 \, s- q' G+ l; ?# {* ^9 t
      doc.AddCustomInfo3 "", "名称", swCustomInfoText, ""; \! G' i* e; n
      doc.AddCustomInfo3 "", "图号代码", swCustomInfoText, ST
/ b7 p, R6 [. s2 R      doc.AddCustomInfo3 "", "名称代码", swCustomInfoText, SG
$ r2 W; v/ u! d  N! N/ R% K) I5 ]
      Set swEquationMgr = doc.GetEquationMgr
) c( K7 |. C! ]  Z- L      swEquationMgr.Add 0, Chr(34) + "A1" + Chr(34) + "=" + Chr(34) + "名称代码" + Chr(34) '添加方程式---"A1"="名称代码"& {: ]/ x5 i% Z2 ~* g
      swEquationMgr.Add 0, Chr(34) + "A2" + Chr(34) + "=" + Chr(34) + "图号代码" + Chr(34) '添加方程式---"A2"="图号代码"
, W& y5 {" u6 r
3 N8 W$ N7 B  Y5 c
9 z( A' |% D. R3 s. @& P0 n! pEnd Sub
- k" [+ `1 Z! F1 [2 u# k: ^* t) C

点评

名称规则:图号+空格+名称  发表于 2023-2-22 14:45
可以在模型树直接改名,并更新到相关自定义属性里了  发表于 2023-2-22 14:44
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-10-21 11:24 , Processed in 0.078744 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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