AutoCad XData消失问题

时间:2010-10-06 14:27:00

标签: c# winforms autocad

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

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

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

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?

感谢。

3 个答案:

答案 0 :(得分:1)

我无法在AutoCAD(地图)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'ed实体所在的图层后,它工作了。在我将它们移动到另一个关闭的层之后,它也起作用了。是否有重现我缺少的步骤? “起草人”在“移动街区”时究竟做了什么?

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

最后,我会抛出一个一般性的建议,即摆脱COM的东西并使用原生的C#API,它将完成你在这里尝试的所有事情。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

Xdata很不稳定。如果你ATTSYNC一块它就会消失。这可能与您的具体问题无关,但这是不依赖Xdata的坚实理由。