如何在SketchBlock(SolidWorks)中获得Note的位置

时间:2017-03-31 02:03:29

标签: solidworks

我试图从绘图中获取所有Notes的文本和位置。 除了阻止之外,我能做到这一点。

当我从块中获取Notes时,要获得文本是成功的但是坐标很奇怪。

      SketchManager swSketch = swModel.SketchManager;
      var blocks = swSketch.GetSketchBlockDefinitions();
      for (int z = 0; z < blocks.Length; z++)
      {
           SketchBlockDefinition block = blocks[z];
           var swNotes = block.GetNotes();

           for (int x = 0; x < swNotes.Length; x++)
           {
               PosX = "";
               PosY = "";
               displayText = "";
               Note swBlockNote = swNotes[x];

               swAnn = swBlockNote.GetAnnotation();
               swDispData = swAnn.GetDisplayData();

               dPoint = swDispData.GetTextPositionAtIndex(0);
               dPoint[0] = dPoint[0] * 1000;
               dPoint[1] = dPoint[1] * 1000;
               PosX_num = dPoint[0].ToString("########0.#########");
               PosY_num = dPoint[1].ToString("########0.#########");
           }
      }

enter image description here

该三角形是块并且有注释文本&#34; A123&#34; 也有72.29mm,227.559mm的位置

但是三角形的位置是X:0.002375 Y:-0.02656当我尝试进入程序时。

我可以得到一些想法,真诚地等待你的帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

BlockDefinitions只是定义。 我不得不像这样得到BlockInstances。

Sketch sktch = swView.GetSketch();
var blockInstance = sktch.GetSketchBlockInstances();

然后我可以获得Block的位置。 但是我们应该小心从基于块实例的视图位置获得的块位置。

例如,如果您将一个块放在查看位置为0的块中,您可以获得正确的块位置,只是尝试从blockinstance获取位置。

但是如果您在一个区块范围内查看哪个区域有位置,您必须将视图的位置与blocinstance的位置相加。 另外,Note的位置是相同的。块中的注释具有基于位置的BlcokDefinition。

请参阅此示例代码,因为我无法用英语解释。

Sketch sktch = swView.GetSketch();
var blockInstance = sktch.GetSketchBlockInstances();
if (blockInstance != null)
{
    double[] blockPos = null;
    double[] viewPos = null;
    for (int instanceCnt = 0; instanceCnt < blockInstance.Length; instanceCnt++)
    {
         SketchBlockInstance instance = blockInstance[instanceCnt];
         SketchBlockDefinition block = instance.Definition;
         MathPoint InstanceMP = instance.InstancePosition;
         blockPos = InstanceMP.ArrayData;
         viewPos = swView.Position;
         var swNotes = block.GetNotes();
         for (int x = 0; x < swNotes.Length; x++)
         {
              Note swBlockNote = swNotes[x];

              swAnn = swBlockNote.GetAnnotation();
              swDispData = swAnn.GetDisplayData();
              dPoint = swDispData.GetTextPositionAtIndex(0);
              dPoint[0] = (dPoint[0] * 1000) + (blockPos[0] * 1000) + (viewPos[0] * 1000);
              dPoint[1] = (dPoint[1] * 1000) + (blockPos[1] * 1000) + (viewPos[1] * 1000);
         }
     }
}