SolidWorks二次开发-修改对象的图层

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
编辑 
收藏 
举报  
来源