Page 1 of 1

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

Posted: 19 Jan 2011, 23:31
by maku
Здравствуйте!

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

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

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

Александр.

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

Posted: 21 Jan 2011, 18:15
by maku
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х линий и одного эллипса.

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

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

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

Александр.