SolidWorks二次开发-修改对象的图层
好久没有写博文了,因为不知道要写些什么了。基础的操作都写的差不多了,正好前一段时间有粉丝咨询了一个问题,是关于如何修改RevisionTable的图层。目标是想把这个表格放到一个红色的图层里面,这样比较醒目。
今天我们把这个当作客户的需求来进行分析,当一个例子来剖析一下SolidWorks二次开发的一些步骤,遇到坑之后应该怎么应对。
- 这个Revision Table是已经存在的表?还是代码插入的。 这就需要考虑到表格对象的获取问题。
- 图层是已经存在的,还是需要重新建立的。
接下来,就是进行研究测试阶段,看看怎么样快速找到达到效果的办法。
1.录制宏,把手动修改的图层的动作做一次,看Solidworks的宏录制器是否能够记录到。
如下图,操作时只需要先选中表格,在左侧把图层改掉。这样表格就变成了红色。
停止录制,发现代码只有这么几句,没有发现有效的信息。
Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("DetailItem188@Sheet1", "REVISIONTABLE", 3.55132394288651E-02, 0.2577670483868, 0, False, 0, Nothing, 0)
End Sub
上面这里录制的是已经存在表格的情况,我考虑没有这个表的情况下插入试试,经过测试,发现如果我们把Solidworks的工程图当前 图层改为Red,此时再插入表格时,就会自动在这个图层了。
但是我们把录制的插入表格的宏再次运行时,表格居然还是黑色的。没有被 放到Red图层里。
这样子的话,说明这个插入的api是有问题的,可能是bug. 那就只能另想办法了
2.查Api
通过个地方可以看到,有不少接口是有Layer这个属性的,但是没有任务Table相关的对象。
我们再查一下与revision table相关的信息,发现了RevisionTableAnnotation 说明它可能和Annotation有关。
然后我们看到一个关键信息。
这样就大概理清楚了,直接先在VBA里面进行测试执行。
RevisionTableAnnotation->TableAnnotation->(Annotation)GetAnnotation->Layer
...
Set myRevisionTable = currentSheet.InsertRevisionTable2(True, 0#, 0#, swBOMConfigurationAnchor_TopLeft, "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\English\standard revision block.sldrevtbt", swRevisionTable_CircleSymbol, True)
Dim ann As TableAnnotation
Set ann = myRevisionTable
Dim ann2 As Annotation
Set ann2 = ann.GetAnnotation
ann2.Layer = "Layer1"
测试没有问题,再转换到其它语言中。
增加到我们的法宝上:
//这里需要自己打开一个工程图。 并存在名称为Red的图层 (代码新建在之前的章节里有写)
var swApp = PStandAlone.GetSolidWorks();
var swModelDoc = (ModelDoc2)swApp.ActiveDoc;
DrawingDoc drawingDoc = (DrawingDoc)swModelDoc;
Sheet drwSheet = (Sheet)drawingDoc.GetCurrentSheet();
var myRevisionTable = drwSheet.InsertRevisionTable2(true, 0, 0, (int)swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft, @"C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\English\standard revision block.sldrevtbt", (int)swRevisionTableSymbolShape_e.swRevisionTable_CircleSymbol, true);
var tableAnn = (TableAnnotation)myRevisionTable;
var Ann = tableAnn.GetAnnotation();
Ann.Layer = "Red";
看看结果 :
虽然 位置不太合理,但效果是对的。
这个案例就这么多,里面有些很具体的思路逻辑需要大家自己感悟。经验性的东西没法一次性讲清楚,就记的住。
正常我能记住的项目周期基本上不会超过半个月,过了半个月就和新项目区别不大了
所以只能学会方法,才能更快的工作。
关注我,下一篇更精彩。
posted @
2023-03-24 18:00
painezeng 阅读(
0) 评论(
0)
编辑
收藏
举报
来源