我试图从绘图中获取所有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.#########");
}
}
该三角形是块并且有注释文本&#34; A123&#34; 也有72.29mm,227.559mm的位置
但是三角形的位置是X:0.002375 Y:-0.02656当我尝试进入程序时。
我可以得到一些想法,真诚地等待你的帮助。谢谢。
答案 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);
}
}
}