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

How can get Note's position which in SketchBlock(SolidWorks)

我试图从绘图中获取所有注释的文本和位置。 我可以,除了阻止的东西。

当我从块中获取注释时,获取文本成功但是坐标很奇怪。

      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.#########");
           }
      }

那个三角形是方块并且有注释文字"A123" 还有位置72.29mm, 227.559mm

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

能不能给点意见,诚挚的等待您的帮助。谢谢。

BlockDefinitions 只是定义。 我必须像这样获取 BlockInstances。

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

然后我可以得到布洛克的位置。 但是我们应该注意从基于块实例的视图位置获得的块位置。

例如,如果您调整一个块以查看位置为 0、0 的块,您可以获得正确的块位置,只需尝试从块实例中获取位置即可。

但是,如果您将一个块范围设置为具有位置的视图,则必须将视图的位置与 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);
         }
     }
}