Выбор 3D полилинии (ПОЛРЕД)
Выбор 3D-полилинии предусматривает особые параметры команды ПОЛРЕД.
При выборе 3D-полилинии отображаются следующие запросы.
Замкнуть
Создание замыкающего сегмента полилинии, соединяющего его последний сегмент с первым. Полилиния считается открытой, пока ее не замкнуть с помощью параметра «Замкнуть».
Если полилиния в текущий момент замкнута, параметр «Замкнуть» заменяется параметром «Разомкнуть».
Открыть
Удаление замыкающего сегмента полилинии. Полилиния считается замкнутой до ее размыкания с помощью параметра «Открыть».
Добавить
Присоединение разомкнутой кривой к 3D полилинии. Кривая может находиться на другой плоскости, но должна соприкасаться с 3D полилинией.
Редактировать вершину
Выполнение различных функций редактирования над вершиной полилинии и примыкающими к ней сегментами.
След
Перемещение маркера X к следующей вершине. При этом маркер не будет циклически переходить от конца к началу полилинии даже в том случае, когда последняя замкнута.
Пред
Перемещение маркера X к предыдущей вершине. При этом маркер не будет циклически переходить от начала к концу полилинии даже в том случае, когда последняя замкнута.
Разорвать
Запоминание места вершины, отмеченной маркером X, при перемещении маркера к другим вершинам.
Удаление всех сегментов и вершин между двумя заданными вершинами и возвращение в режим редактирования вершин.
Завершение работы в режиме «Разорвать» и возвращение в режим редактирования вершин.
Если какая-либо из заданных вершин попадает на конец полилинии, то полилиния усекается. Если обе заданные вершины попадают на концы полилинии (или если задана одна вершина и она попадает на конечную точку), то опцию «Разорвать» использовать нельзя.
Вставить
Добавление к полилинии новой вершины после той вершины, которая в текущий момент помечена маркером Х.
Перенести
Перенос помеченной в данный момент вершины в другое место.
Регенерировать
Выпрямить
Запоминание места вершины, отмеченной маркером X, при перемещении маркера к другим вершинам.
Перемещение маркера X к следующей вершине.
Перемещение маркера X к предыдущей вершине.
Удаление всех сегментов и вершин между двумя заданными вершинами, замена их одним прямолинейным сегментом и возвращение в режим редактирования вершин. Если задается только одна вершина (вводом слова выполнить без перемещения маркера Х), то будет спрямлен следующий за вершиной сегмент (если он является дугой).
Завершение работы в режиме «Выпрямить» и возвращение в режим редактирования вершин.
Если требуется удалить дуговой сегмент, связывающий два прямых сегмента полилинии, а затем продлить эти прямые сегменты до пересечения, то следует воспользоваться командой «СОПРЯЖЕНИЕ» с нулевым радиусом скругления.
Выход
Выход из режима редактирования вершин.
Сплайновая кривая
Сглаживание 3D кривой B-сплайна по ее управляющим точкам. Системная переменная SPLFRAME позволяет управлять точностью и отображением на экране управляющих точек для 3D B-сплайна, кривые которого могут быть аппроксимированы только сегментами линии. Отрицательные значения для сегментов сплайна игнорируются.
Убрать сглаживание
Удаление всех дополнительных вершин, вставленных при выполнении операций «Сгладить» и «Сплайн», и выпрямление всех сегментов полилинии. Любая информация о касательных, заданная для вершин полилинии, оставляется для последующего использования при выдаче запросов «Сгладить». После обработки сглаженной сплайном полилинии с помощью такой команды, как «РАЗОРВАТЬ» или «ОБРЕЗАТЬ», параметр «Убрать сглаживание» нельзя будет использовать.
Обратить
Изменение порядка вершин полинии на обратный. Этот параметр используется для обращения направления объектов, в которых используются типы линий с включенным текстом. Например, в соответствии с направлением, в котором была создана полилиния, текст для данного типа линии может отобразиться в перевернутом виде.
Отменить
Отменяется действие операций редактирования до наступления состояния, существовавшего в начале сеанса ПОЛРЕД.
Полилиния в Автокаде
В Автокад полилиния представляет собой сложный примитив. Это совокупность отрезков, которые представляют собой единый цельный объект. Это позволяет задавать нестандартные параметры, которые присущи только полилинии. Рассмотрим более подробно, что такое полилиния в Автокаде и как ее создать. Также вы можете посмотреть видео обучение по Автокаду.
AutoCAD полилиния. Параметры команды и настройка полилинии в Автокаде
Полилиния в Автокаде строится так же, как и обычные отрезки. Однако параметры, которые можно задать при построения полилинии, уникальные.
Команда, отвечающая за то, как нарисовать полилинию в Автокаде, расположена на вкладке «Главная», на панели «Рисование». Можно также воспользоваться псевдонимом команды и прописать в командной строке «ПЛ», что означает полилиния в Автокаде.

Полилиния в Автокаде состоит из линейных и/или дуговых сегментов, а также любых их сочетаний. Обратиться к тому или иному параметру можно через командную строку.
К самым распространенным параметрам полилинии относятся:
- Дуга – позволяет создавать дуговые сегменты. При выборе данного параметра появляются дополнительные подпараметры, такие как радиус, направление и др., позволяющие управлять дуговыми сегментами.
- Линейный (установлен по умолчанию) – позволяет создавать линейные сегменты.
- Ширина (не путать с толщиной линии) – для каждого отдельного сегмента можно задать значение начальной и конечной ширины. С помощью данного параметра создана стрелка в примере на рис.

У полилинии достаточно много параметров. Более подробно про каждый из них можно прочитать в справке Autodesk (F1).
Где можно использовать полилинию?
Данный инструмент удобно использовать при трехмерном моделировании. Чтобы плоскому объекту задать объем, он должен быть замкнутым и цельным. Например, с помощью полилинии можно создать контур внутренних и наружных стен, а затем его вытянуть.
Также эту команду применяют в качестве траектории для массива или сдвига.
Очень удобно обрезать рисунок в AutoCAD, обводя нужный контур полилинией.
Это лишь некоторые примеры, где можно применять данный инструмент.
Таким образом, полилиния в Автокаде – полезный инструмент, обладающий уникальными свойствами и параметрами. И поэтому знание того, как создать или как замкнуть полилинию в Автокаде, является важным при работе с данной программой.
Освойте профессию проектировщика
Научитесь быстрому черчению, освоите прикладное 3D, автоматизируете создание ведомостей и спецификаций.
Самоучитель AutoCAD 3D
Исходный контур – далее просто контур, это определяющее понятие, своего рода опорная точка всего твердотельного моделирования в AutoCAD. Без правильно созданного контура невозможно построить ни одного трехмерного твердотельного объекта, отличного от типовых тел-примитивов.
Контур – это фигура на плоскости образованная набором плоских примитивов AutoCAD, например, таких как отрезок, дуга или сплайн.
В твердотельном моделировании, прежде чем сформировать какое-то объемное тело необходимо подготовить определенным способом плоский рисунок (шаблон или подложку) и только после этого применить к нему определенные инструменты по формированию тела.
На рис. 4.13 показаны плоские замкнутые контуры, предназначенные для формирования на их основе 3D тел операциями вращения и выдавливания.

Рис. 4.13. Геометрия некоторых исходных контуров
Некоторые типовые геометрические примитивы, такие, например, как круг, прямоугольник и другие, можно рассматривать как подложки, уже готовые для формирования на их основе твердых тел.
Существует два основных способа построения исходного контура, каждый из которых имеет свои особенности и алгоритм выполнения:
- Применение инструмента Контур.
- Преобразование набора плоских примитивов AutoCAD в замкнутый контур с помощью инструмента Редактировать полилинию.
Есть еще один способ, но он применяется крайне редко – это преобразование набора плоских примитивов в область .
На рис. 4.14 представлены падающие меню с командами преобразования исходного контура в замкнутый контур (интерфейс Лента) и полилинию (из опций ГМн).


Рис. 4.14. Выбор инструментов построения контура
Алгоритм для 1-го способа по подсказкам КС:
- активизировать инструмент Контур, в результате откроется ДО Контур, рис. 4.15;

Рис. 4.15. Интерфейс ДО Контур
- в окне нажать кнопку OK;
- внутренняя точка: указать любую точку внутри контура. Если формируется несколько контуров, то последовательно указать точки в каждом и щелкнуть Ent;
- для выхода из действия команды нажать Esc.
Алгоритм для 2-го способа по подсказкам КС:
- запустить команду Редактировать полилинию, рис. 4.14.б;
- выберите полилинию или [Несколько]: щелкните ПКн и в КМн указать пункт Несколько;
- выберите объекты: выделить, лучше рамкой, те объекты, которые подлежат преобразованию в контур и щелкнуть Ent;
- преобразовать отрезки, дуги и сплайны в полилинии [Да, Нет] ? : щелкнуть ПКн и КМн выбрать опцию Да;
- задайте параметр [Замкнуть, Разомкнуть, Добавить,…]: щелкнуть ПКн и КМн выбрать опцию Добавить;
- дважды щелкнуть по клавише Ent.
Двух рассмотренных выше способов вполне достаточно, для того чтобы преобразовать набор плоских примитивов рисования в замкнутую полилинию (исходный контур), т.е. объекты, пригодные к последующему формированию на их основе 3D тел.
В свою очередь AutoCAD располагает еще несколькими инструментами, с помощью которых можно создать осмысленные в той или иной мере подложки, пригодные для дальнейших построений.
Ниже перечислены эти инструменты и путь к ним:
При построении контура, как подложки для последующего формирования на ее основе 3D тел, следует придерживаться двух простых правил:
- Исходный контур должен быть замкнут, в противном случае AutoCAD сформирует поверхность.
- Все линейные примитивы, образующие контур, должны принадлежать одной плоскости.
Как закрыть полилинию?
Посмотрел по форуму на тему как закрыть полилинию, предложен вариант с pedit
Мне интересно, можно ли как-то иначе программно замкнуть полилинию, чтоб акад не выбрасывал лишние строчки в командную строку
#2 Ответ от Александр Ривилис 7 сентября 2005г. 11:20:57
Re: Как закрыть полилинию?
> Николай
Конечно можно. Причем разными способами. Не указано о каком типе полилинии идет речь, что не правильно, т.к. их как минимум три типа.
1) Просто задать признак замкнутости:
AcDbPolyline::setClosed
AcDb2dPolyline::makeClosed
AcDb3dPolyline::makeClosed
2) Добавить еще одну вершину, совпадающую с первой — мене красивый способ — не рекомендую.
#3 Ответ от Николай 7 сентября 2005г. 11:46:49
Re: Как закрыть полилинию?
Это все не плохо, но такой вариант распространяется ТОЛЬКО на польлинию заданного типа. Мне необходимо закрыть AcDbCurve. Т.к. под этот тип попадает несколько больший выбор примитивов, например, окружность.
Код выглядит примерно так:
AcDbCurve* pCurve; switch( acedEntSel("\nУкажите контур: ", ent,pt) ) < case RTCAN : case RTERROR : case RTNONE : return; case RTNORM : ; >pCurve = Ccast(ent,0,0); if(pCurve == 0) < acedAlert("Объект не является кривой AutoCAD"); return; >if( !pCurve->isClosed() ) < // замкнуть контур >
#4 Ответ от Александр Ривилис 7 сентября 2005г. 11:59:27
Re: Как закрыть полилинию?
> Николай
И как вы рассчитывали замкнуть AcDbCurve при помощи _PEDIT? Наивный! Это же базовый класс.
#5 Ответ от Николай 7 сентября 2005г. 12:03:02
Re: Как закрыть полилинию?
через acedCommand, во только «З» надо нажимать вручную 🙂
А этого как раз и не хочется
#6 Ответ от Николай 7 сентября 2005г. 12:10:49
Re: Как закрыть полилинию?
Кстати в БД автокада на полилинии есть код 070 с типом 16 bit integer. Если значение установлено 1, то полилиния замкнута, если 0, но разомкнута. Может попробовать так? Вот только я не могу к нему достучаться 🙁 Помогите кто -нибудь:)
#7 Ответ от Александр Ривилис 7 сентября 2005г. 12:11:16
Re: Как закрыть полилинию?
> Николай
Что Вы так закнете? Ну окружность понятно Вы так замыкать не будете. Дугу? Но тогда ее нужно превратить в полилинию. Собственный примитив (custom entity)? Тогда он как минимум должен быть производным от одного из типа полилиний. Что конкретно вы собираетесь замыкать? Если уточните — я попробую подсказать.
#8 Ответ от Александр Ривилис 7 сентября 2005г. 12:15:50
Re: Как закрыть полилинию?
> Николай
Как не можете достучаться? acdbEntGet — получает список примитива, проходитесь по нему, заменяете группу 70, если она есть (а она есть не у всех примитивов производных от AcDbCurve и есть у других примитивов с совершенно другим смыслом). А затем acdbEntMod на этот список и acdbEntUpd на сам примитив.
#9 Ответ от Николай 7 сентября 2005г. 12:20:01
Re: Как закрыть полилинию?
Полилинию, многоугольник, окружность.
Замыкать только полилинию, но вот проверки на замкнутость идут для всех. Поэтому и работаю с базовым классом, чтоб не создавать большого количества разнообразных переменных и увеличивать код
#10 Ответ от Александр Ривилис 7 сентября 2005г. 12:24:28
Re: Как закрыть полилинию?
> Николай
Так не получится, т.к. у AcDbCurve нет метода типа makeClose(). Хотя бы по той причине, что не для всех производных классов допустимо «замыкание» (например дуга — AcDbArc), а некоторые, как окружность (AcDbCircle), эллипс (AcDbEllipse) могут быть только замкнутыми.
#11 Ответ от Александр Ривилис 7 сентября 2005г. 12:34:31
Re: Как закрыть полилинию?
if( !pCurve->isClosed() ) < // замкнуть контур AcDbPolyline *pP = AcDbPolyline::cast(pCurve); if (pP) pP->setClosed(true); AcDb2dPolyline *pP2 = AcDb2dPolyline::cast(pCurve); if (pP2) pP2->makeClosed(true); AcDb3dPolyline *pP3 = AcDb3dPolyline::cast(pCurve); if (pP3) pP3->makeClosed(true); >
Кстати, и с производными от них классами будет работать, если они нормально написаны.
#12 Ответ от Николай 7 сентября 2005г. 13:01:55
Re: Как закрыть полилинию?
Unhandled exception at 0x7c81eb33 in acad.exe: 0xE0000001: 0xe0000001.
Это вылетает сразу при попытке замкнуть pP.
C точки зрения написания все вроде бы правильно. Что это может быть?
#13 Ответ от Александр Ривилис 7 сентября 2005г. 13:46:18
Re: Как закрыть полилинию?
Что делает Ccast(ent,0,0)? Полностью исходный текст.
Вообще-то примитив должен быть корректно открыт для записи.
#14 Ответ от Николай 7 сентября 2005г. 14:58:35
Re: Как закрыть полилинию?
приблизительно тоже самое, что и ::cast()
Все, я со всем разобрался. Спасибо за помощь.
код стал выглядеть вот так:
. if( !pCurve->isClosed() ) < if (::MessageBox(0,"\nКонтур не замкнут!\nЗамкнуть контур?","Внимание. ",1)!=IDOK) close();return;> AcDbPolyline *pP = AcDbPolyline::cast(pCurve); AcDb2dPolyline *pP2 = AcDb2dPolyline::cast(pCurve); AcDb3dPolyline *pP3 = AcDb3dPolyline::cast(pCurve); if (pP!=0) < pP->upgradeOpen(); pP->setClosed(true); pP->downgradeOpen(); pP->close(); > if (pP2!=0) < pP2->upgradeOpen(); pP2->makeClosed(); pP2->downgradeOpen(); pP2->close(); > if (pP3!=0) < pP3->upgradeOpen(); pP3->makeClosed(); pP3->downgradeOpen(); pP3->close(); > > pCurve->close(); .
