机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4819|回复: 13

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

[复制链接]
发表于 2022-5-9 15:56:42 | 显示全部楼层 |阅读模式
如下图片,如何用代码实现添加全局变量:A2="名称"? 其中”名称”是自定义属性。0 }: |$ W9 ?2 y7 Q1 u
, N/ B% d4 c5 H5 r& y8 I: \# K0 A+ F

& b8 L% {+ r: d/ b
. v6 i8 ?% \$ y6 n" h4 g

本帖子中包含更多资源

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

x

评分

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

查看全部评分

回复

使用道具 举报

发表于 2022-5-10 08:16:25 | 显示全部楼层
首先,方程式只能是数值,这很重要。& ]9 L# I- W" o$ T
那么,你自定义属性也得整个数值的,就简单了。
回复 支持 反对

使用道具 举报

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

: A# i# U) Z+ r$ j; o

本帖子中包含更多资源

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

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 | 显示全部楼层
方程式只支持纯数值的自定义属性调用,如果调用自定义属性的文本值直接在属性调用即可5 ?. r" u+ g3 T
如图:3 p' o0 \8 v) c1 x

9 w1 \- e* O- \  P. l
0 ]" ^! q8 r# l7 ~

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

% l, o( B& _1 V* B" A我的主要问题是如何用宏代码实现自动添加?/ ~% L0 y+ Y# o' s, m
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 16:41:34 | 显示全部楼层
swapi 自带的例子,swEquationMgr.Add3 有错?- }( b/ f8 a) E- k+ j* `6 w1 O
例子如下:
, r) ~; l. h0 j- x0 l  w$ @  OOption Explicit1 ], E. G- P+ q( `* j9 r$ i9 s3 v
Sub main()! @! z/ b/ e6 g3 p
2 ^  j4 I6 C, V9 U5 a# e$ n9 k
    Dim SwApp           As SldWorks.SldWorks- C; t8 Z* |5 f' U* W
    Dim Part            As SldWorks.ModelDoc26 V( G( H3 O/ z' _5 Z
    Dim swEquationMgr   As SldWorks.EquationMgr
' p3 Q4 S3 S! G& G4 h# o" B9 `    Dim longEquation    As Long4 D1 r' @8 d! B& I4 K
- r. S( ?! J3 U* p4 R
" x% m4 Y( J/ k
    Set SwApp = Application.SldWorks
4 Q. ]2 ^( k8 O6 `    Set Part = SwApp.ActiveDoc, [6 J* O$ T% |  J" Z# N
8 [& i) C( T' @5 e# P- X: ~7 a
    Set swEquationMgr = Part.GetEquationMgr% A; @: Q. a3 q9 Z3 Q. n
    If swEquationMgr Is Nothing Then ErrorMsg SwApp, "Failed to get the equation manager"
& W. A; L! ?3 `( K9 B7 s) ~0 e7 L
( _# Y6 Z- P3 }! R" ~
    'Add a global variable assignment at index, 0, to all configurations5 q+ ~! ^. \1 X/ D0 t" g0 z
    longEquation = swEquationMgr.Add3(0, """A"" = 2in", True, swAllConfiguration, Empty)
4 J& s8 R, g% }' K7 w( w$ j    If longEquation <> 0 Then ErrorMsg SwApp, "Failed to add a global variable assignment"" D  X9 s  f; V
, a( ^0 q' E0 Q% q$ Y0 E
" M3 b7 l( |8 K" o! ?9 S
    'Add a dimension equation at index, 1, to all configurations
$ k7 U6 Z: X" y4 J; B    longEquation = swEquationMgr.Add3(1, """D1@Boss-Extrude1"" = 0.05in", True, swAllConfiguration, Empty)0 {  D& n; b3 q9 N+ F. r1 c
    If longEquation <> 1 Then ErrorMsg SwApp, "Failed to add a dimension equation"
( j3 L; L' V) |' o) q# I
1 D& g# {/ F; d% K& T& f# w
6 E4 t2 r: L1 ?" M' T. l    'Modify dimension equation at index, 1, in all configurations
( e& |3 F/ i8 k/ [* q    longEquation = swEquationMgr.SetEquationAndConfigurationOption(1, """D1@Boss-Extrude1"" = 0.07in", swAllConfiguration, Empty)6 C) `! T  H8 b  x* B6 R1 ~
    If longEquation <> 1 Then ErrorMsg SwApp, "Failed to modify a dimension equation"
! ]* ^* ?) }( R( c1 g, h
; }6 W4 C) V8 G7 }, R
! Q% \) Q% w6 h( g1 W! |. @! x+ c6 m! C/ n' H, N: v" B
End Sub0 Y0 f5 R% o; {+ k1 D; Q8 [- r- ]) D

" Z% [* p3 p& t0 o# q
0 a  T/ S& B: G9 A0 ~/ NFunction ErrorMsg(SwApp As Object, Message As String)
. D( }& ^8 C/ q" _2 B, z& N0 c/ M    SwApp.SendMsgToUser2 Message, 0, 0
) {' L- r7 R' `1 ^/ {  ~; H, l8 [7 n    SwApp.RecordLine "'*** WARNING - General"
7 j  ^1 d$ m! a; E    SwApp.RecordLine "'*** " & Message
8 p8 z8 U8 D+ r: O( [/ ]    SwApp.RecordLine ""+ r/ l& {2 A! a2 F
End Function
7 B: X; I+ J8 I( v# a& g# M5 e
, c2 a! ~' O: x) T
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-24 13:53:29 | 显示全部楼层
自定义属性内嵌宏代码:图号代码:    "Part.Extension.CustomPropertyManager("").Set("drawingN",Left(Part.GetTitle, InStr(Part.GetTitle, " ")-1))
% P0 z$ g4 e# S$ Z6 g名称代码:     Part.Extension.CustomPropertyManager("").Set("partN",Right(Part.GetTitle, Len(Part.GetTitle)-InStr(Part.GetTitle," ")))
, f9 `% B& F% ]' @3 edrawingN:
, M/ ^5 x" f9 g4 A  upartN:   
% K* L. O9 U$ ?* W- }8 l
" q" W" [1 ]5 A4 N7 _% D, D/ q  E9 u8 r# P+ d: p
方程式: 目前只能手动$ g% b7 |) e+ |" r
A1="图号代码"
# F9 p# t9 b0 d% [8 l  NA2="名称代码"
% A' x) U5 E0 s, d2 \% P

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-22 14:43:18 | 显示全部楼层
Dim swApp As Object/ L' P4 G% x) {% r
Sub main()
: S# ]# y. P  K  B  J: j: k" `! J; v/ R+ h  X4 k( V
Set swApp = Application.SldWorks
- f6 F# d% Z, V: S; Z9 X  u. a  o! p6 d! s: @4 O6 W! w
Set doc = swApp.ActiveDoc+ S8 `4 [. {4 C  x6 V
  For Each an In doc.GetCustomInfoNames   '删除所有自定义属性5 @! H7 H0 B5 h! D- ~9 p: y: B' ?
   doc.DeleteCustomInfo an
+ X) L/ @/ R5 ^+ G9 q  Next
2 o9 i2 _* `4 Y  ^" }# iDim ST, SG As String5 p+ i4 ?. n: N3 p! N* B# Z
      ST = ""
; M' l5 K/ _9 }; `+ S& I      SG = "") t  a6 g( j$ o0 D. w4 i
    If doc.GetType = 1 Then '零件图- l7 y$ {8 Z1 J/ w% h

; i% ^$ D2 E  b" i( U& O: @4 C& R       ST = "Part.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "图号" + Chr(34) + _) k% O+ S7 a2 n( [5 M% _& L
             ",Left" + Chr(40) + "Part.GetTitle, InStr" + Chr(40) + "Part.GetTitle, " + Chr(34) + " " + Chr(34) + Chr(41) + "-1" + Chr(41) + Chr(41)
" x; g2 y, M; k7 s: i! L! }. a6 `- M) V
       SG = "Part.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "名称" + Chr(34) + ",Right" + _8 t, H2 s" _! \4 d/ Q% M3 B
             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)7 `  r+ B: V+ z" D' W1 _
      7 v" q. u& X7 i6 w9 a
    ElseIf doc.GetType = 2 Then '装配体8 Q; P  M% [' h2 x3 z8 @( |* A! B
      1 j7 ^3 {7 w3 P. B$ U% y/ T
       ST = "Assembly.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "图号" + Chr(34) + _
, S" I7 j$ h  g8 z" f$ \6 w8 X          ",Left" + Chr(40) + "Assembly.GetTitle, InStr" + Chr(40) + "Assembly.GetTitle, " + Chr(34) + " " + Chr(34) + Chr(41) + "-1" + Chr(41) + Chr(41)3 I, k9 I, B" S& t# M5 H

) ^/ t4 i0 h8 U. _       SG = "Assembly.Extension.CustomPropertyManager" + Chr(40) + Chr(34) + Chr(34) + Chr(41) + ".Set" + Chr(40) + Chr(34) + "名称" + Chr(34) + ",Right" + _
; z. _0 V4 ]0 C) L, x3 j           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)
1 }# J, O1 [6 p7 R     End If
- E+ ]5 H* u+ E7 k      doc.AddCustomInfo3 "", "图号", swCustomInfoText, ""
! V/ G1 R/ V5 }) d% b9 u      doc.AddCustomInfo3 "", "名称", swCustomInfoText, ""$ g& [+ W1 x5 {; S
      doc.AddCustomInfo3 "", "图号代码", swCustomInfoText, ST3 X8 z1 Q( y. }
      doc.AddCustomInfo3 "", "名称代码", swCustomInfoText, SG' V4 n: l2 D1 A/ r! A5 v

0 g" {+ z* H3 {5 f% ^2 S      Set swEquationMgr = doc.GetEquationMgr, K" f9 I3 }. y
      swEquationMgr.Add 0, Chr(34) + "A1" + Chr(34) + "=" + Chr(34) + "名称代码" + Chr(34) '添加方程式---"A1"="名称代码"
9 b: l. e5 H* i/ ~* A, A% F      swEquationMgr.Add 0, Chr(34) + "A2" + Chr(34) + "=" + Chr(34) + "图号代码" + Chr(34) '添加方程式---"A2"="图号代码"
% J2 {7 r3 V' p/ f0 p
" ?2 h! W- ~# w; x( M* R! U
% U, X/ ^( s8 l# ~/ Q& E3 b& BEnd Sub, O8 p. A; M$ r! Q  i7 \& j9 Q

点评

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 19:00 , Processed in 0.054153 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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