如何获得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);
}
}
}
我试图从绘图中获取所有注释的文本和位置。 我可以,除了阻止的东西。
当我从块中获取注释时,获取文本成功但是坐标很奇怪。
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);
}
}
}