Определить вычитание объектов (Subtract)

Обсуждение вопросов импорта поддерживаемых форматов
Post Reply
maku
Posts: 2
Joined: 19 Jan 2011, 23:21

Определить вычитание объектов (Subtract)

Post by maku » 19 Jan 2011, 23:31

Здравствуйте!

Имеется чертеж DWG(или DXF), в котором 2 региона: прямоугольник и круг, круг вычтен из прямоугольника с помощью метода "Вычитание" (Subtract).
subtract-objs.png
subtract-objs.png (2.86 KiB) Viewed 36411 times
Вопрос: как, с использованием CADImport .Net, определить что круг вычтен из прямоугольника?
П.С. с перечислением всех Entities входящих в объект (регион) проблем нет.

support
Posts: 3271
Joined: 30 Mar 2005, 11:36
Contact:

Re: Определить вычитание объектов (Subtract)

Post by support » 21 Jan 2011, 11:15

Здравствуйте.
Результатом вычитания областей в Автокаде является составная область. Если не ошибаюсь определить что вычитание было произведено у вас не получится даже в Автокаде. Пожалуйста обратите внимание также что в текущей версии CAD Import .NET области не поддерживаются.

Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

maku
Posts: 2
Joined: 19 Jan 2011, 23:21

Re: Определить вычитание объектов (Subtract)

Post by maku » 21 Jan 2011, 18:15

support wrote:Здравствуйте.
Результатом вычитания областей в Автокаде является составная область. Если не ошибаюсь определить что вычитание было произведено у вас не получится даже в Автокаде. Пожалуйста обратите внимание также что в текущей версии CAD Import .NET области не поддерживаются.

Александр.
Автокад ведь отрисовывает прямоугольник с дыркой в центре, значит как-то он это определяет.
Очень даже не плохо поддерживаются... Версия 7.2.7.26044
Ниже пример, сделанный на скорую руку для Автокадовского файлика из предыдущего поста:

Code: Select all

        private void button1_Click(object sender, EventArgs e)
        {
            CADImage cadImage = CADImage.CreateImageByExtension("temp1.dwg");
            cadImage.LoadFromFile("temp1.dwg");

            richTextBox1.AppendText(foreachEntities(cadImage.Converter.Entities,""));

        }

        private string foreachEntities(CADEntityCollection ent,string tabstr)
        {
            if (ent == null) { return null; }
            string retstr = "";
            for (int i = 0; i < ent.Count; i++)
            {
                retstr = retstr + tabstr + ent[i].EntType.ToString() + (ent[i].Entities == null ? "\n" : "\n" + tabstr + "{\n") + foreachEntities(ent[i].Entities, tabstr + " ") + (ent[i].Entities == null ? "" :  tabstr + "}\n\n");
            }
            return retstr;
        }
Вот результат работы:

Code: Select all

Region
{
 Ellipse
 Line
 Line
 Line
 Line
}
Видно, что регион состоит из 4х линий и одного эллипса.

п.с. как вариант можно, конечно, по вложенным замкнутым контурам определять вычитание объектов.

support
Posts: 3271
Joined: 30 Mar 2005, 11:36
Contact:

Re: Определить вычитание объектов (Subtract)

Post by support » 24 Jan 2011, 15:41

Здравствуйте.
Автокад ведь отрисовывает прямоугольник с дыркой в центре, значит как-то он это определяет.
Прямоугольник с отверстием в центре это составная область. Файл не содержит информации получена ли область вычитанием, но содержит информацию о геометрии области.
Очень даже не плохо поддерживаются... Версия 7.2.7.26044
Ниже пример, сделанный на скорую руку для Автокадовского файлика из предыдущего поста:
...
Видно, что регион состоит из 4х линий и одного эллипса.
Действительно CAD Import .NET содержит примитив CADRegion для импорта областей. Вы получите набор примитивов образующих его границы. Но вот отрисовываться область будет как набор этих составляющих примитивов. Кроме того экспорта областей вы также не получите. Поэтому вернее сказать что поддержка областей не полная (только импорт).

Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Post Reply