找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5525|回复: 13

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

[复制链接]
发表于 2022-5-9 15:56:42 | 显示全部楼层 |阅读模式
如下图片,如何用代码实现添加全局变量:A2="名称"? 其中”名称”是自定义属性。$ J; k! X8 |4 f( |. }  @

+ c9 J6 `6 \1 t) K4 {( E6 q$ K- O
3 e6 x! K/ j2 c1 J  C* r! L1 u2 @

本帖子中包含更多资源

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

×

评分

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

查看全部评分

回复

使用道具 举报

发表于 2022-5-10 08:16:25 | 显示全部楼层
首先,方程式只能是数值,这很重要。3 C& t( _2 n1 W  C3 ~2 W' g1 ~8 `
那么,你自定义属性也得整个数值的,就简单了。
发表于 2022-5-10 08:26:43 | 显示全部楼层
. M6 L1 v  d- F" @. [; p& S

本帖子中包含更多资源

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

×

点评

全局变量的“值”是数值,用代码可以自动添加。但是,变量的值引用自定义属性里面的名称字段,用代码没搞出来。  发表于 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 | 显示全部楼层
方程式只支持纯数值的自定义属性调用,如果调用自定义属性的文本值直接在属性调用即可$ K6 }$ ~" M+ k- t
如图:
/ d2 I  y- @4 e) }/ D/ z' }( X; y

; O9 B* B9 y  D. m* R- j

本帖子中包含更多资源

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

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

1 ^% u: W) a' D( m6 \* Y9 P" @我的主要问题是如何用宏代码实现自动添加?
# Q2 [; h5 ]2 p; W7 |/ {5 `1 d
 楼主| 发表于 2022-5-11 16:41:34 | 显示全部楼层
swapi 自带的例子,swEquationMgr.Add3 有错?6 C5 ^% ?2 G6 ?/ U
例子如下:
# w0 `4 C+ u& p; g" ?1 j/ mOption Explicit" V& l# E" Y9 ^6 F
Sub main()
& |  E& `, P- Z  l* x% b" T, v, q/ g9 d3 A. t* z" A5 n6 \5 r
    Dim SwApp           As SldWorks.SldWorks) {& z" n: o$ d+ [
    Dim Part            As SldWorks.ModelDoc2
( N4 m# h0 l9 J* Z; \+ H5 L6 M+ _    Dim swEquationMgr   As SldWorks.EquationMgr4 ^% q% I& L4 Y# I; H
    Dim longEquation    As Long
) p" j) X& i7 q5 H* B: @& H& a8 \& A4 V+ }) b3 h
$ w* V0 u2 w9 s- O4 f7 T1 b3 ?
    Set SwApp = Application.SldWorks
# u+ w, P' E4 s0 [( p    Set Part = SwApp.ActiveDoc
/ X- O" S2 u( l$ _2 O8 w9 y: b9 I
0 t6 o+ L: I" z- E4 {    Set swEquationMgr = Part.GetEquationMgr% |9 W" ?6 D1 T# y- K# X% `
    If swEquationMgr Is Nothing Then ErrorMsg SwApp, "Failed to get the equation manager"
0 {1 L4 g6 d# x! f- a, i* R/ t) a+ Z! ]( O6 G9 v: w

" o7 h8 J' F' d1 R5 H. c    'Add a global variable assignment at index, 0, to all configurations
9 E) U: C( k- B: {    longEquation = swEquationMgr.Add3(0, """A"" = 2in", True, swAllConfiguration, Empty)
4 Y! W# J( |( R8 i" K    If longEquation <> 0 Then ErrorMsg SwApp, "Failed to add a global variable assignment"6 |2 X! u1 S8 \: ~; O

/ g* U5 `7 {% `3 K
* l; }2 z* I$ c: u) C6 y    'Add a dimension equation at index, 1, to all configurations
9 \1 f8 T2 m# f    longEquation = swEquationMgr.Add3(1, """D1@Boss-Extrude1"" = 0.05in", True, swAllConfiguration, Empty)
* m' v* l# Z; |# [& G' _' e$ s    If longEquation <> 1 Then ErrorMsg SwApp, "Failed to add a dimension equation") V0 s, l8 w* ^  ~4 Y% n

" {$ \3 P2 b2 _# Z1 `8 s- m2 Q
- \: _3 x% {9 p; K9 b, `    'Modify dimension equation at index, 1, in all configurations
6 p! j! }. I/ x4 v5 a: W    longEquation = swEquationMgr.SetEquationAndConfigurationOption(1, """D1@Boss-Extrude1"" = 0.07in", swAllConfiguration, Empty)
$ i* `& J* q$ G- h    If longEquation <> 1 Then ErrorMsg SwApp, "Failed to modify a dimension equation"
% ~& }) b4 _' P1 o0 B. A) @0 u+ S# v) d& M
  M# |  p* u9 N  B" x
0 ?8 j# w& [) `- |% {$ d
End Sub
0 W5 E  R' h0 l- K- {  A* s8 N, Q6 c9 Q: v7 p

  I& E2 U/ S$ Q( r3 s- XFunction ErrorMsg(SwApp As Object, Message As String)% Q$ ]& G! f: S1 H6 x4 U
    SwApp.SendMsgToUser2 Message, 0, 0' N; V4 R. R, F: w  ~! Q+ D
    SwApp.RecordLine "'*** WARNING - General"' D  o. y% C' m. y* j& g2 z
    SwApp.RecordLine "'*** " & Message" q5 K2 y5 b) I
    SwApp.RecordLine ""
: Q$ d  `0 t1 |- @9 ?' Q  K. Z$ [End Function
6 L, l" e* F  U0 L' W2 u& f( i( b. @9 p# |* ?
 楼主| 发表于 2022-5-24 13:53:29 | 显示全部楼层
自定义属性内嵌宏代码:图号代码:    "Part.Extension.CustomPropertyManager("").Set("drawingN",Left(Part.GetTitle, InStr(Part.GetTitle, " ")-1))9 @7 J+ k8 ^" l0 o
名称代码:     Part.Extension.CustomPropertyManager("").Set("partN",Right(Part.GetTitle, Len(Part.GetTitle)-InStr(Part.GetTitle," ")))) V# ?: q, [& H) ?8 L( Y
drawingN:
8 P: q0 n* m3 K. ~partN:   
1 W& r1 k8 Y9 K
: ?7 A* h, g& o; y9 _0 f. l8 d5 A  n9 E$ d, }, y. ?
方程式: 目前只能手动
" X; _" j4 K8 b. K! _( _( yA1="图号代码"6 X* M, I# ?7 _1 u7 P) F7 b
A2="名称代码"
* F' H3 z* J% v8 @6 m/ m

本帖子中包含更多资源

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

×
 楼主| 发表于 2023-2-22 14:43:18 | 显示全部楼层
Dim swApp As Object6 X' s# N8 E( ~9 x* D) i
Sub main()0 [1 K: c, s2 G' j7 `1 q5 R$ o; v) d

2 i2 h" T* u+ B# ]7 T7 TSet swApp = Application.SldWorks! V8 k: L2 {& {4 ?* |
7 Q: e$ L1 {; E- R* n2 K
Set doc = swApp.ActiveDoc* R  ]$ K- V3 t! s8 R
  For Each an In doc.GetCustomInfoNames   '删除所有自定义属性  R& C( b' W0 B- Q$ `. l
   doc.DeleteCustomInfo an
) v9 C- k$ n. a! }  Next
- [4 Q+ ?$ ]# y5 l8 ]Dim ST, SG As String( y0 P) m$ ~0 _% q: o- a3 E" V
      ST = ""
7 A" i- P. ~0 I% x' \1 ^      SG = ""
5 I! a5 B7 U- z6 b- H    If doc.GetType = 1 Then '零件图
, D% x3 v! B& B2 C3 ^9 o1 k# Q/ X
: p% Z, M$ {9 s( M  G( C       ST = "Part.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "图号" + Chr(34) + _; w% {8 S( c) T1 b9 V5 J3 M7 f/ N
             ",Left" + Chr(40) + "Part.GetTitle, InStr" + Chr(40) + "Part.GetTitle, " + Chr(34) + " " + Chr(34) + Chr(41) + "-1" + Chr(41) + Chr(41)/ p/ b% V7 C( f
* W- s, F9 V% |! s
       SG = "Part.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "名称" + Chr(34) + ",Right" + _
8 m: m$ c# h9 W- O             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)4 k/ i* K7 `9 x& u1 X! [# _/ Y
      , r- x3 `# b' F$ n; b
    ElseIf doc.GetType = 2 Then '装配体0 I" J8 L/ E( c4 O
      1 |; d* q" B$ ^0 p" I
       ST = "Assembly.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "图号" + Chr(34) + _9 ?' a3 M4 e4 G) W5 y, B: [
          ",Left" + Chr(40) + "Assembly.GetTitle, InStr" + Chr(40) + "Assembly.GetTitle, " + Chr(34) + " " + Chr(34) + Chr(41) + "-1" + Chr(41) + Chr(41)
$ Z( d( j, _# ]* y2 t! V3 _9 p  O, z+ U: u
       SG = "Assembly.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "名称" + Chr(34) + ",Right" + _1 N+ X" @4 P  r$ W
           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)
) f6 n, z9 [5 j( |& }! r     End If
+ d; I" h* m1 I# D. w1 U# O      doc.AddCustomInfo3 "", "图号", swCustomInfoText, ""% @5 y) |+ @( ?( b7 C5 _* i
      doc.AddCustomInfo3 "", "名称", swCustomInfoText, ""3 X$ B! Z9 S0 s1 n! V; h& F7 j9 _
      doc.AddCustomInfo3 "", "图号代码", swCustomInfoText, ST8 @' o9 U" \* `: V" t4 r
      doc.AddCustomInfo3 "", "名称代码", swCustomInfoText, SG: f9 B6 ]: I& j9 |, f) T/ t) P! D

" p  J& M0 v$ h  W2 W      Set swEquationMgr = doc.GetEquationMgr# j5 z/ {& U9 h8 ]7 I' I
      swEquationMgr.Add 0, Chr(34) + "A1" + Chr(34) + "=" + Chr(34) + "名称代码" + Chr(34) '添加方程式---"A1"="名称代码"7 _, f4 o. E) }' e) T
      swEquationMgr.Add 0, Chr(34) + "A2" + Chr(34) + "=" + Chr(34) + "图号代码" + Chr(34) '添加方程式---"A2"="图号代码"
. A/ L( ~. y  ~9 G
% p% l, H. V! q: Y$ E6 Y+ {* b# a; ]% z' r+ M" v! [
End Sub# S" ~6 d, K( c# V/ p

点评

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

本版积分规则

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

GMT+8, 2025-7-16 05:46 , Processed in 0.084599 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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