Проблема исчезновения AutoCad XData - PullRequest
0 голосов
/ 06 октября 2010

У меня есть приложение C #, которое взаимодействует с AutoCad. Его задача - просмотреть все сущности в модели и найти те, которые применимы к тому, что мы делаем, с помощью поиска определенных тегов XData.

Проблема заключается в том, что когда составители перемещают блок на любой слой, помеченный как «невидимый» (т.е. выключает слой), тогда xdata не может быть обнаружен с помощью обычного цикла:

</p> <pre><code>foreach (AcadEntity ent in ACAD.ActiveDocument.ModelSpace) { ... get xData from the entity. }

Я попытался снова включить слой, используя следующий код:

</p> <pre><code>ACAD.ActiveDocument.Layers.Item("HIDDENLAYER").LayerOn = true; ACAD.Update(); foreach...

... но xData, похоже, не возвращается с ним. Это как если бы перемещение его на невидимый слой сняло XData с объекта. Это было бы плохо.

Есть ли "правильный" способ получения XData из предметов на невидимых слоях?

Спасибо.

Ответы [ 3 ]

1 голос
/ 09 декабря 2011

Я не могу воспроизвести это в 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. Это также сработало после того, как я переместил их на другой отключенный слой. Есть ли способ воспроизвести то, что мне не хватает? Что именно делают «составители», когда «перемещают блок»?

Кроме того, если вы обеспокоены тем, что xdata исчезает по-настоящему, используйте команду XDLIST, чтобы просмотреть ее непосредственно в AutoCAD.

Наконец, я выкину общую рекомендацию отойти от COM-вещей и использовать собственный C # API, который будет делать все, что вы пытаетесь сделать здесь.

0 голосов
/ 14 октября 2010

Xdata является летучим.Если вы ATTSYNC блок, он уходит.Возможно, это не связано с вашей конкретной проблемой, но это веская причина не полагаться на Xdata.

0 голосов
/ 06 октября 2010

Пока что ответом стало «Не перемещайте этот предмет на скрытый слой». Вместо этого я помечаю слой как скрытый по умолчанию, прежде чем помещать XData, и это, кажется, работает нормально. Я не уверен, как исчезает XData, но сейчас это работает для меня.

Мне все еще интересно, есть ли у кого-нибудь какие-либо предложения относительно того, как XData исчезнет.

...