| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно соединить полилинию, часть которой удалена под блоком

Как программно соединить полилинию, часть которой удалена под блоком

Ответ
Поиск в этой теме
Непрочитано 18.04.2018, 20:51 #1
Как программно соединить полилинию, часть которой удалена под блоком
Alex_Shaton
 
Гомель
Регистрация: 09.09.2017
Сообщений: 19

Я часто пользуюсь Lisp от Lee Mac - AutoBlockBreakV1-8.lsp отсюда - http://www.lee-mac.com/autoblockbreak.html. В полилинию вставляется блок, под блоком часть полилинии удаляется. Часто встречается и обратная задача - удалить указанный блок, соединить 2 конца полилинии. Поиск по форуму результатов не дал. Вариант решения нашел здесь -https://autocadtips1.com/2014/11/12/autolisp-updated-heal-linepolyline/. Сохранил в блокноте как Lisp, проверил на AutoCAD 2007 и AutoCAD2015_64, представленный там код не срабатывает (хотя описано, что код рабочий). Уважаемые гуру! Подскажите - это ошибка в коде или я что-то делаю не так. Или может есть другие варианты решения этой задачи?
Просмотров: 8726
 
Непрочитано 18.04.2018, 21:11
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Цитата:
Сообщение от Alex_Shaton Посмотреть сообщение
Поиск по форуму результатов не дал.
Поиск по словам "Хитрый блок" многое покажет )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.04.2018, 10:22
#3
Andrey_nadym


 
Регистрация: 22.02.2008
Сообщений: 174


Пробовать надо. Читайте похожие темы

http://forum.dwg.ru/showthread.php?t=8284
https://dwg.ru/dnl/607

https://forum.dwg.ru/showthread.php?t=95515
https://forum.dwg.ru/showthread.php?t=33696
https://forum.dwg.ru/showthread.php?t=143411

https://www.google.ru/search?q=%D1%8...w=1920&bih=974
Andrey_nadym вне форума  
 
Непрочитано 19.04.2018, 14:31
| 1 #4
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от Alex_Shaton Посмотреть сообщение
В полилинию вставляется блок, под блоком часть полилинии удаляется.
А нарисовать в блоке Wipeout по графике блока не проще будет?
koMon вне форума  
 
Непрочитано 19.04.2018, 15:56
#5
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Цитата:
Сообщение от koMon Посмотреть сообщение
А нарисовать в блоке Wipeout по графике блока не проще будет?
Сие не всегда оправдано, ибо wipeout это по сути рисунок, и отсюда бывает появляются проблемы, особенно если не подгружены соответствующие библиотеки.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:

Последний раз редактировалось zenon, 19.04.2018 в 16:10.
zenon на форуме  
 
Непрочитано 19.04.2018, 17:58
#6
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от zenon Посмотреть сообщение
и отсюда бывает появляются проблемы,
при всём уважении, из встроенного мануала:
"Because a wipeout object is similar to a raster image, it has the same requirements for plotting. You need a raster-capable plotter with either an ADI 4.3 raster-capable driver or the system printer driver."
"Поскольку объект Wipeout идентичен растровой картинке, для его печати требуются те же требования. Вам необходим плоттер, способный печатать растровую графику с ADI 4.3 драйвером или драйвер для принтера из набора операционной системы."
Но, имхо, внести необратимые изменения в графические примитивы, порезкой например полилинии - совсем не комильфо(
koMon вне форума  
 
Непрочитано 19.04.2018, 18:15
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Цитата:
Сообщение от koMon Посмотреть сообщение
Но, имхо, внести необратимые изменения в графические примитивы, порезкой например полилинии - совсем не комильфо(
ну поскольку это программная ветка, но не совсем необратимо) Просто как-то должны запоминаться (например, в расширенных данных) - что данные отдельные примитивы когда то являлись частью целого и каким объектом была "разбита" полилиния. А потом в событии/реакторе удаления данного объекта "склеивать" полилинии и модифицировать их расширенные данные.
Сергей812 вне форума  
 
Непрочитано 19.04.2018, 18:16
#8
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


koMon, ну как пример:
https://forum.dwg.ru/showthread.php?t=130510
https://forum.dwg.ru/showthread.php?t=6571
https://forum.dwg.ru/showthread.php?t=20031

как сказал, может вызвать проблемы.
Причем тут печать не понял.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon на форуме  
 
Автор темы   Непрочитано 19.04.2018, 21:14
#9
Alex_Shaton


 
Регистрация: 09.09.2017
Гомель
Сообщений: 19


Большое спасибо всем за ответы, буду копать дальше
Alex_Shaton вне форума  
 
Непрочитано 20.04.2018, 06:58
#10
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 978


Наверно надо приложить пример, и заодно написать в поиск исполнителей.
baksconstructor вне форума  
 
Непрочитано 20.04.2018, 08:41
#11
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от zenon Посмотреть сообщение
Причем тут печать не понял.
ну я так теоретичеки полагаю, что это единственная возможная проблема могущая возникнуть например. написал, но ссылки не посмотрел.. исправлюсь) ссылки посмотрел.

----- добавлено через ~8 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну поскольку это программная ветка, но не совсем необратимо) Просто как-то должны запоминаться (например, в расширенных данных) - что данные отдельные примитивы когда то являлись частью целого и каким объектом была "разбита" полилиния. А потом в событии/реакторе удаления данного объекта "склеивать" полилинии и модифицировать их расширенные данные.
это очень идеальный и очень сложный вариант решения. но к примеру можно найти крайние точки касания контура блока остатков того, что было под блоком и соединить их сравняв их координаты. вот только если этих остатков будет не от одного примитива?

Последний раз редактировалось koMon, 20.04.2018 в 08:57.
koMon вне форума  
 
Непрочитано 20.04.2018, 09:38
#12
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Цитата:
Сообщение от koMon Посмотреть сообщение
это очень идеальный и очень сложный вариант решения. но к примеру можно найти крайние точки касания контура блока остатков того, что было под блоком и соединить их сравняв их координаты. вот только если этих остатков будет не от одного примитива?
Этот вопрос надо решать в момент "разбивки" блоком полилинии - когда создает две полилинии вместо одной, то в расширенные данные эти полилиний прописывается какой то общий идентификатор и ссылка на хэндл блока. Когда блок удаляется - по его хендлу ищется совокупность групп разбитых им полилиний, а затем уже анализ их геометрии для поиска ближайших друг к другу конечных узлов полилинии с последующим соединением. Ничего тут идеального нет, просто несколько связанных подзадач.
Сергей812 вне форума  
 
Непрочитано 20.04.2018, 10:08
#13
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Ничего тут идеального нет
я имел в виду буквально следующее: идеальный ≡ совершенный
koMon вне форума  
 
Непрочитано 20.04.2018, 10:21
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


ну скорее не совершенный, а реализуемый с предсказуемой логикой работы)
Сергей812 вне форума  
 
Непрочитано 20.04.2018, 12:05
#15
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


koMon, кстати, а стандартную команду СОЕДИНИТЬ (_join) почему не попробовать?
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon на форуме  
 
Непрочитано 20.04.2018, 15:32
#16
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


zenon, я думаю можно и join, но это командный метод...
koMon вне форума  
 
Непрочитано 20.04.2018, 16:13
#17
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Эту команду тоже надо откуда то "дергать", не руками же вызывать каждый раз. И насколько помню - в событиях/реакторах очень не рекомендуется использовать командные методы.
Сергей812 вне форума  
 
Непрочитано 20.04.2018, 16:24
#18
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Что то вы переусложнили... ИМХО, достаточно поверх существующего примитива овердравит нужное отображение. Да, работать будет только при загруженной библиотеке, но имхо это меньшее из зол.
Boxa вне форума  
 
Непрочитано 20.04.2018, 16:31
#19
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Цитата:
Сообщение от Boxa Посмотреть сообщение
достаточно поверх существующего примитива овердравит нужное отображение. Да, работать будет только при загруженной библиотеке, но имхо это меньшее из зол.
Цитата:
Сообщение от Alex_Shaton Посмотреть сообщение
Часто встречается и обратная задача - удалить указанный блок, соединить 2 конца полилинии.
две разные задачи всетаки, имхо.
Сергей812 вне форума  
 
Непрочитано 20.04.2018, 16:39
#20
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Приведу Вашу же цитату:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну поскольку это программная ветка, но не совсем необратимо) Просто как-то должны запоминаться (например, в расширенных данных) - что данные отдельные примитивы когда то являлись частью целого и каким объектом была "разбита" полилиния. А потом в событии/реакторе удаления данного объекта "склеивать" полилинии и модифицировать их расширенные данные.
Проще не разбивать и реакторы ставить, а просто перерисовывать отображение. Добавили блок, нарисовали разрыв, убрали блок - убрали и разрыв.
Если же исполнителю досталось разгребать последствия чей то работы... тут можно только посочувствовать.
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно соединить полилинию, часть которой удалена под блоком

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли сделать динамический блок, чтобы одна часть его была аннотативная, а другая нет? Falaleichik Динамические блоки 6 31.01.2022 17:44
Как программно закрыть полилинию Peter123 Программирование 8 11.05.2012 08:57
как программно создать полилинию? mamuk Программирование 5 30.05.2011 11:44
Программно заполнить рамку чертежами и открыть другую solo123 Программирование 2 25.02.2011 19:46
подскажите как программно начертить линии разных типов Александер Программирование 4 30.06.2005 07:17