Перейти к содержанию

Рекомендуемые сообщения

Добрый день! В процессе освоения возникла задача: есть контур, обведенный отрезками и дугами полилиний. Объекты отдельные, но крайние точки совпадают, таким образом визуально контур замкнут. Необходимо объединить все полилинии в одну замкнутую. В версии НаноКАД 1.2 была вообще замечательная команда объединения отрезков, когда выделялись все отрезки, и одним кликом получалась замкнутая полилиния. В версии 4 я этой команды не нашел. Хотел воспользоваться "автокадовским" методом: взять одну из полилиний, войти в режим редактирования, нажать "добавить", выбрать остальные и завершить команду. И все бы хорошо, но контур при такой схеме не замыкается (в автокаде замыкался), хотя начальная и конечная точка совпадают. Если выбрать опцию "замкнуть", то контур в принципе замкнется, но точки начала и конца не сплавятся, а между ними будет отрезок нулевой длины, что не допустимо и может породить в дальнейшем проблемы при делении отрезка и прочем редактировании. Единственный способ который я нашел это удалить один из прямых отрезков, объединить все остальные и нажать "замкнуть". Но во-первых это не очень удобно, а во-вторых, бывают ситуации когда контур состоит только из дуг, и в этом случае способ не работает.

 

Прошу подсказки в решении данной задачи. Заранее благодарен.

Ссылка на сообщение
Поделиться на другие сайты

Если все конечные точки совпадают, то Черчение-Контур.

Или тупо обвести.

Ссылка на сообщение
Поделиться на другие сайты

Если все конечные точки совпадают, то Черчение-Контур.

 

Черчение-Контур повзоляет указать контур только путем указания внутренней точки, как при заливке (по крайней мере других вариантов я не нашел). Это во-первых алгоритмически криво (чего стоит только одно требование чтобы область полностью вписывалась в экран), а во-вторых, должны отсутствовать какие-либо посторонние объекты, которые пересекают или находятся внутри контура, а в достаточно навороченном чертеже это весьма проблематично. Задача как раз в том и состояла, чтобы не ползьзоваться алгоритмически кривой заливкой по внутренней точке, а сделать замкнутый контур, и кошерно его залить через выбор контура.

 

Или тупо обвести.

 

Ну этот вариант понятен, но не рационален - контур может быть достаточно сложным. Хотя как крайняя мера - да, остается. Но все-таки хотелось бы найти более "красивое" решение, тем более что не только в автокаде, а даже в более ранних версиях нанокада такое решение было.

Ссылка на сообщение
Поделиться на другие сайты

... взять одну из полилиний, войти в режим редактирования, нажать "добавить", выбрать остальные и завершить команду. И все бы хорошо, но контур при такой схеме не замыкается (в автокаде замыкался), хотя начальная и конечная точка совпадают.

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

 

Если выбрать опцию "замкнуть", то контур в принципе замкнется, но точки начала и конца не сплавятся, а между ними будет отрезок нулевой длины, что не допустимо и может породить в дальнейшем проблемы при делении отрезка и прочем редактировании.

Вырожденный отрезок нулевой длины, увы, получить не удалось. Возможно это происходит в каком-то частном случае (контуров ведь великое множество может быть).

Просьба в связи с этим сделать и выложить скриншот вашего контура, а еще лучше файл с контуром и вырожденным отрезком.

Заранее спасибо.

Ссылка на сообщение
Поделиться на другие сайты

Просьба в связи с этим сделать и выложить скриншот вашего контура, а еще лучше файл с контуром и вырожденным отрезком.

 

К сожалению ни того ни другого вставить не смог. Напрямую вставка картинки не дает сохранить сообщение, загрузил и скрин и файл на файлы.мейл.ру - не дает отправить. Так что извините. Но вырожденный отрезок возникает всегда. Он находится между последней и первой точкой замкнутой полилинии, поскольку координаты этих точек совпадают. Для того, чтобы убедиться в его наличии достаточно сделать PEdit -> Вершины -> Переместить с первой или последней точкой.

Ссылка на сообщение
Поделиться на другие сайты

Нажмите ниже чуть окна "Ответить" кнопку "Расширенная форма", станут доступны кнопки выбора и загрузки файла.

Ссылка на сообщение
Поделиться на другие сайты

Но вырожденный отрезок возникает всегда. Он находится между последней и первой точкой замкнутой полилинии, поскольку координаты этих точек совпадают. Для того, чтобы убедиться в его наличии достаточно сделать PEdit -> Вершины -> Переместить с первой или последней точкой.

Позвольте тут с вами не согласиться: перемещение по вершинам говорит только о том, что первая и последняя вершина полилинии совпадают. И ни в коей мере о том, что в связи с этим там находится отрезок нулевой длины (почему именно отрезок, а не сегмент полилинии или вырожденная дуга?).

Кстати, первая и последняя вершина полилинии могут совпадать не только у разомкнутой полилинии, но и у замкнутой в том случае, если она была преобразована из разомкнутой в замкнутую изменением в окне Свойства параметра Замкнуто с Нет на Да или выбором опции Замкнуть при ее редактировании (и в автокаде тоже).

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

Перемещаться по вершинам, чтобы в этом убедиться, также лучше при помощи окна Свойства (строка Вершина, при клике в поле значения строки отображаются стрелки влево-вправо для перемещения по вершинам).

 

Проверить наличие (или отсутствие) вырожденного отрезка можно так:

- построить контур,

- Ctrl+A (или "Выбрать все" в ПКМ),

- в строке Объекты окна Свойства посмотреть в раскрывающемся списке какие объекты попали в выбор.

 

Кстати, если есть отрезок, можно выбрать его в списке, нажать кнопку "Оставить в выборе", и либо удалить (если вырожденный), либо перенести, скопировать и прочее.

Ссылка на сообщение
Поделиться на другие сайты

В версии НаноКАД 1.2 была вообще замечательная команда объединения отрезков

 

Это да.

 

Вот еще довольно трудоемкий способ. Делаем все элементы (отрезки, дуги) полилиниями (Редактирование полилинии) и добавляем к исходной (Редактирование полилинии-ПКМ-Добавить).

Ссылка на сообщение
Поделиться на другие сайты

Но вырожденный отрезок возникает всегда. Он находится между последней и первой точкой замкнутой полилинии, поскольку координаты этих точек совпадают. Для того, чтобы убедиться в его наличии достаточно сделать PEdit -> Вершины -> Переместить с первой или последней точкой.

Позвольте тут с вами не согласиться: перемещение по вершинам говорит только о том, что первая и последняя вершина полилинии совпадают. И ни в коей мере о том, что в связи с этим там находится отрезок нулевой длины (почему именно отрезок, а не сегмент полилинии или вырожденная дуга?).

[skip]

Кстати, если есть отрезок, можно выбрать его в списке, нажать кнопку "Оставить в выборе", и либо удалить (если вырожденный), либо перенести, скопировать и прочее.

 

А, вон вы о чем. Прошу прощения, разошлись в понятиях. Конечно я имел ввиду вырожденный сегмент полилинии (в каком-то случае может и дуга, но на мой взгляд не принципиально). Необходимость в файлах на данный момент отпала, поскольку вы устно все правльно описали )) Вопрос остался только в одном - на мой взгляд оставлять в чертеже замкнутые полилинии с совпадающими вершинами и нулевыми сегментами - это закладывать себе мину замедленного действия, поскольку какие глюки и при каких дальнейших операциях могут возникнуть - я даже боюсь себе представить. Поэтому все-таки хочется найти способ сделать нормальный замкнутый контур. Причем кстати, вариант "обвести" тут тоже может не сработать - он работает только в том случае, если последний сегмент обязательно прямой. То есть если вся полилиния состоит из дуг, то перед замыканием все равно придется совместить последнюю точку с первой, иначе вместо дуги получится отрезок. В последних версиях автокадов можно было бы замкнуть прямой, а потом, подведя курсор к ее середине, из выпадающего меню преобразовать ее в дугу, но пока (я надеюсь что в скором времени что-то подобное появится) в функционале нанокада такой возможности нет.

Ссылка на сообщение
Поделиться на другие сайты

И все-таки, zMaximus, выложите файл с вырожденным сегментом полилинии (если есть такой - способ его нахождения - см. выше #7).

Перепробовал ряд контуров - не нахожу нулевых сегментов, отрезков и прочее.

Очень хотелось бы взглянуть на ваш контур. Уже говорил, что контуров может быть великое множество...

И, кстати, вы в какой версии работаете?

Ссылка на сообщение
Поделиться на другие сайты

И все-таки, zMaximus, выложите файл с вырожденным сегментом полилинии (если есть такой - способ его нахождения - см. выше #7).

Перепробовал ряд контуров - не нахожу нулевых сегментов, отрезков и прочее.

Очень хотелось бы взглянуть на ваш контур. Уже говорил, что контуров может быть великое множество...

И, кстати, вы в какой версии работаете?

 

Версия 4.5 обычная, и spds 4.0

 

Метод обнаружения повторю: передвигаем первую или последнюю точку. Становится видим сегмент, соединяющий их. Это говорит о том, что он там есть. А так как первая и последняя точка полилинии совпадали, значит длина этого сегмента нулевая. То есть он вырожденный. Он принадлежит полилинии, поэтому увидить его в инспекторе объетов нельзя (он не является отдельным объектом).

 

Возможные проблемы с этим предсказать сложно, но опасаться заставляет то, что по опыту работы в том же 3DS MAX'е такие вещи нельзя было оставлять. К примеру, fillet и chamfer (сопряжение и фаска) там делались применительно к точке, и "упираясь" в соседнюю не выполнялись. Ну и много еще каких "хвостов" вылезало.

 

зы: последниее мое сообщение, форму пишет что больше пока писать не даст ))

nanofile01.dwg

post-55173-0-09205100-1360144977.jpg

Ссылка на сообщение
Поделиться на другие сайты

Метод обнаружения повторю: передвигаем первую или последнюю точку. Становится видим сегмент, соединяющий их.

 

Простите, не виден сегмент - видны 2 совпадающие вершины.

 

Это говорит о том, что он там есть. А так как первая и последняя точка полилинии совпадали, значит длина этого сегмента нулевая. То есть он вырожденный. Он принадлежит полилинии, поэтому увидить его в инспекторе объетов нельзя (он не является отдельным объектом).

 

В отличие от действительно вырожденных объектов (отрезков, имеющих нулевую длину; окружностей, имеющих нулевой радиус и т.д., создание которых запрещено и в nanCAD, и, кстати, в упоминавшемся вами автокаде) я бы не стал говорить о сегменте полилинии, находящемся между совпадающими вершинами, что он вырожденный. Максимум, имеющий нулевую длину.

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

Вырожденные отрезки, окружности, дуги не видимы на экране и выбираются только командой SelectAll (причем, замечу, видимы становятся даже не эти объекты, а их ручки).

 

Возможные проблемы с этим предсказать сложно, но опасаться заставляет то, что по опыту работы в том же 3DS MAX'е такие вещи нельзя было оставлять.

 

А почему, как вы считаете, в автокаде разрешены полилинии, имеющие более 2-х вершин, но имеющие вид отрезка (полилинии, вернее) с двумя ручками, или даже вид точки? Не берусь тоже предсказывать возможные проблемы в случае совпадения вершин у полилинии. Просто не знаю их.

Но вот если такое запретить, то думаю, проблемы совместимости с dwg-файлами, созданными в других программах, у нас будут.

Но. Есть одно но. Все вышесказанное не означает, что те ошибки, которые найдены или будут найдены (в том числе и во вашим замечаниям), не будут правиться. Это относится и к команде ПОЛРЕД (не самой простой и не самой удобной для использования). Замечания по этой команде есть, предложения тоже, они разработчикам известны. Подождем выхода следующих версий.

Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

Можно реализовать отдельную команду, которая пробегается по полилинии, ищет такие вырожденные сегменты и удаляет их.

 

Кстати, создать отрезок нулевой (почти) длины в нанокаде очень легко. Проводим отрезок, пересекаем его парой линий и проводим обрезку. выбрав в качестве границ обрезки эту вторую пару. и отрезая от первого отрезка сперва одну из внешних частей, потом середину. Часто в "отрезанной" точке пересечения получается такой сверхкороткий отрезок. Думаю, длина его не нулевая, но очень малая - порядка 10-15, что с практической точки зрения можно считать нулём. И причина думаю в том, что получившийся в результате первой обрезки отрезок может пересекаться с линией обрезки в точке, не совпадающей с концом отрезка.

Ссылка на сообщение
Поделиться на другие сайты

Можно реализовать отдельную команду, которая пробегается по полилинии, ищет такие вырожденные сегменты и удаляет их.

 

Кстати, создать отрезок нулевой (почти) длины в нанокаде очень легко. Проводим отрезок, пересекаем его парой линий и проводим обрезку. выбрав в качестве границ обрезки эту вторую пару. и отрезая от первого отрезка сперва одну из внешних частей, потом середину. Часто в "отрезанной" точке пересечения получается такой сверхкороткий отрезок. Думаю, длина его не нулевая, но очень малая - порядка 10-15, что с практической точки зрения можно считать нулём. И причина думаю в том, что получившийся в результате первой обрезки отрезок может пересекаться с линией обрезки в точке, не совпадающей с концом отрезка.

Простите, но из объяснений не понятно, что именно Вы делаете. Можете файл приложить с нарисованными отрезками - до пересечения?

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...