0

我有一个与 AutoCad 交互的 C# 应用程序。它的工作是遍历模型上的所有实体,并通过查找特定 XData 标记的存在来找到适用于我们正在做的事情的实体。

问题是当起草者将一个块移动到任何标记为“不可见”的层(即关闭层)时,xdata 无法通过通常的循环发现:

foreach (AcadEntity ent in ACAD.ActiveDocument.ModelSpace)
{
    ... get xData from the entity.
}

我尝试使用以下代码再次打开图层:

ACAD.ActiveDocument.Layers.Item("HIDDENLAYER").LayerOn = true;
ACAD.Update();
foreach...

...但 xData 似乎没有回来。就好像将它移动到一个不可见的层会从对象中剥离 XData。那会很糟糕。

是否有“正确”的方式从不可见图层上的项目中获取 XData?

谢谢。

4

3 回答 3

1

我无法在 AutoCAD (Map) 2012 中重现此问题。您使用的是什么版本的 AutoCAD?

你到底在里面做什么... get xData from the entity.?我这样做了:

    static AcadApplication ACAD
    {
        get
        {
            return
                Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as AcadApplication;
        }
    }

    [CommandMethod("tlo")]
    public static void TestLayerOff()
    {
        foreach (AcadEntity ent in ACAD.ActiveDocument.ModelSpace)
        {
            //... get xData from the entity.
            object xdata, xdataType;
            ent.GetXData("MyRegisteredAppName", out xdataType, out xdata);
            //... read and spit out the xdata to the command line to see what we got
        }
    }

在我关闭我的 xdata 实体所在的图层后,它起作用了。在我将它们移动到关闭的不同层后,它也起作用了。有没有重现我遗漏的步骤?“起草人”在“移动区块”时究竟在做什么?

此外,如果您担心 xdata 真的会消失,请使用 XDLIST 命令直接在 AutoCAD 中查看它。

最后,我将提出一个一般性建议,即摆脱 COM 的东西并使用本机 C# API,这将完成您在此处尝试执行的所有操作。

于 2011-12-09T19:13:49.410 回答
0

目前,答案已变为“不要将此项目移动到隐藏层”。相反,我在放置 XData 之前默认将图层标记为隐藏,这似乎工作正常。我不确定 XData 是如何消失的,但现在,这对我有用。

我仍然很好奇是否有人对 XData 如何消失有任何建议。

于 2010-10-06T16:10:45.907 回答
0

Xdata 是易失的。如果你 ATTSYNC 一个块,它就会消失。这可能与您的具体问题无关,但这是不依赖 Xdata 的充分理由。

于 2010-10-13T20:39:29.753 回答