|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Возможно ли восстановить взорванные размеры?
Регистрация: 03.12.2009
Сообщений: 87
|
||
Просмотров: 6717
|
|
||||
Конструктор по сути (машиностроитель) Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391
|
Offtop:
![]()
__________________
Век живи, век учись - ... |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Возможно этот пост написал бедолага, которому в руки по наследству достались такие файлы и работать с ними как то надо. Мне такое прилетало, работать с таким г-ом это боль.
Тут еще идейка пришла. Найдя засечку, можно искать объекты размера по хендлу... они должны быть последовательными... Сумбурно объяснил, но думаю направление мысли понятно. Хорошая задачка, интересная. |
|||
![]() |
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Исправление одиночного перебитого размера при условии, что размер не расчленен.
Код:
Последний раз редактировалось Setvar, 05.10.2017 в 17:02. |
|||
![]() |
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Да, я знаю. Постепенно нащупываю решение.
Восстановление расчлененного размера (при условии сохраненных блоков стрелок). Код:
|
|||
![]() |
|
||||
Регистрация: 03.12.2009
Сообщений: 87
|
Setvar, спасибо большое!
Код с поста #8 шикарен! Можно сказать бОльшая часть задачи решена. Встречный вопрос (признаюсь, не силен в лисп программировании) - возможна ли множественная отбивка размеров? Сейчас выбираю несколько [недо] разбитых размеров -> запускаю лисп -> на выходе отбивается только один верхний размер. В принципе с полностью разбитыми размерами все решаемо - через быстрый выбор заменил отрезки-засечки (они как правило на чертеже все одного размера и под углом 45° и 135°) на блоки - и лисп их уже распознает как остатки размеров. P.S. Надо будет подумать, как автоматизировать отбивку блоков на месте отрезков-засечек. |
|||
![]() |
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Вот тут загвоздка. Когда мы выбираем 1 "размер", то фактически ясно, между какими точками строить новый размер, поскольку этих точек всего 2. В случае множественного выбора расчлененных размеров появляется неопределенность в попарном соответствии точек. Пока я не могу придумать приемы установки критериев соответствия точек.
Замену отрезков на блоки-засечки, я думаю, можно автоматизировать. Но есть еще проблемы: 1. Стрелки (а не засечки). Там не блоки, а фигуры. 2. Наклонные размеры. В этом случае надо применять команду "_dimaligned", а не "_dimlinear". Следовательно, надо проверять точки вставки блоков на неравенство координат по X или по Y. |
|||
![]() |
|
||||
Регистрация: 03.12.2009
Сообщений: 87
|
В качестве наводки. Может попробовать задать условие, при котором отбивка размеров происходила только при наличии между блоками текста-цифры, расположенного строго по центру между точками. Понимаю, что не все тексты размеров бывают строго по центру, но все же (может люфт какой задать?) это было бы очень большим шагом вперед.
Про наклонные размеры - частности. Если их много - задачу [думаю] можно будет решать путем ручной смены ПСК (UPD: попробовал - не решает, увы - размеры улетают в далекие дали). |
|||
![]() |
|
||||
Регистрация: 03.12.2009
Сообщений: 87
|
Поменять засечки на блоки похоже можно при помощи кода из поста по ссылке http://forum.dwg.ru/showpost.php?p=1...postcount=3398
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Setvar, он больше так не будет. Да же, megabeton?
![]() Мне нравится идея Вохи. Добавлю толику своих размышлений. Получается, в коде мы должны тем же ssget'ом собрать все эти объекты, исключив лишние, "нащупать" первый попавшийся блок стрелки и анализировать, что было создано после него по порядковому номеру примитива в базе. Только пока неясно, как выяснить, первая ли это стрелка или заключительная. Предварительно надо разобраться, в какой последовательности создаются эти объекты при взрыве размера. Думаю, что первой создается стрелка, потом линия, текст, и опять стрелка (все это условно, для примера - там будет больше объектов, и это - только предположение, выяснить предлагается megabeton'у). Так вот, если после стрелки идет линия, значит это стрелка первая, если идет еще одна стрелка, то она вторая. Все, что между первой и второй стрелками - и есть нужное. Все это дело мы собираем в новый набор, удаляем, предварительно запомнив точки, по которым построим размер. И так в цикле, пока не кончатся блоки стрелок в чертеже. И еще интересно мне, в набор объекты добавляются в том же порядке, что создавались? Вероятнее всего да. Тогда первая попавшаяся в наборе стрелка (при условии, что начало обработки будет задано с верной стороны) будет первой, за ней должны будут последовать очередные объекты бывшего размера. |
|||
![]() |
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Так, возвращаемся опять в эту тему.
Новая проба: Код:
Напоминаю, что это фактически заготовка для реальной программы, без всяких проверок наличия отсутствия. Последний раз редактировалось Setvar, 06.10.2017 в 20:36. Причина: Уточнение |
|||
![]() |
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
А вот это зачем написано?
Цитата:
На этот счет еще цитата: Цитата:
Еще проба. Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
А ничего, что выходные вообще-то были?
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 03.12.2009
Сообщений: 87
|
Setvar'у, всем откликнувшимся, спасибо большое! Код работает. В принципе, то что надо.
Боюсь спрашивать, Offtop: (уж больно в категоричной форме пользователи замечания делают, извините, если кого кросспостингом обидел) но если вдруг кому не лень, можно как-то докрутить код, чтобы точки (ручки) привязок размеров отстреливали от линии, на которой цифра размера расположена (на какую-нибудь величину, на высоту текста, например). В русифицированном автокаде это командой РЗМСМЕЩ делается (не знаю как в английской версии вызывается), но только в данном случает точки-ручки размера на месте остаются, там текст размера с линией смещаются. А хорошо бы наоборот, чтобы текст с линией на месте остались. И красиво вроде как, и править удобно. Для себя еще попробую прикрутить к Вашему коду код из поста #14 (который AlexV выложил и Кулик Алексей aka kpblc подправил Offtop: [вроде всех указал, тьфу тьфу тьфу]), чтобы одной командой восстанавливать (как правило размеры все же взорваны до упора) |
|||
![]() |
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
megabeton, сейчас у меня почти готова программа восстановления блоков засечек при полном расчленении размеров. Надеюсь только, что предыдущий пользователь не изменил все свойства объектов на "ByLayer" ("ПоСлою"), поскольку у меня в программе задействован как фильтр параметр "ByBlock".
Порядок действия представляется такой: Сначала программно восстанавливаются блоки засечек (если они разбиты). Потом вручную создается размерный стиль с нужными параметрами и делается текущим. И, наконец, программно воссоздаются новые размеры на месте расчлененных. ----- добавлено через ~3 мин. ----- Не хотелось мне, чтобы тема канула в вечность, вот и поднял ее. Тем более, что есть, что нового предложить. |
|||
![]() |
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
В общем закончил. Но есть предварительные замечания.
Отрезки, полученные в результате расчленения блока "_Oblique" сортируются только по типу объекта, по слою и по значению DXF-кода 6 "ByBlock". По длине отрезка и по углу наклона не сортируются. Вызвано это тем, что размер засечки в чертеже может не равняться размеру засечки в исходном блоке (размер засечки задается в конкретном размерном стиле). А угол наклона отрезка-засечки не равен 45 градусам для вертикальных размеров и наклонных. В случае отсутствия в чертеже блока засечек "_Oblique" создается временный размерный стиль для ввода этого блока в чертеж. Потом этот стиль удаляется. Окончательный код программы: Код:
После этого запускается программа восстановления расчлененных размеров. Окончательный программный код: Код:
|
|||
![]() |
|
||||
Регистрация: 03.12.2009
Сообщений: 87
|
Setvar, протестировал. Привожу результаты.
В академических условиях (на чертеже имеются только что [мною] начерченные и взорванные [до упора] размеры, и больше ничего) - коды работают идеально. В условиях реального боя случаются нюансы, связанные [видимо] с ограничениями по свойствам отрезков засечек - не всегда распознаются остатки засечек. При попытке руками заменить засечки-отрезки на блоки-отрезки как правило получаю удивительную мозаику параллельных размеров по всему чертежу. При попытке восстановить руками нарисованный (не взорванный, а именно нарисованный) размер, состоящий из отрезков и текста - засечки не распознаются и не превращаются в блоки (понимаю, что это связано с описанными ограничениями по свойствам объектов). И вот тут реальная проблема, т.к. большинство "разобранных" размеров приходит в автокад из сторонних приложений в виде отрезков и текстов с потерей всевозможных свойств / атрибутов. Очень, конечно, хочется, что бы код "оптически" так сказать, распознавал на чертеже набор объектов из текста, отрезка под ним и с засечками на концах. Т.е. как-то последовательно проделать нечто следующее: - поиск на чертеже отрезков, которые пересекаются с другими отрезками; - последовательная проверка на определенном расстоянии [задаваемым пользователем] от центров отрезков (пусть будет сверху и слева) наличия текста; - сопоставление найденного текста числовому значения, дабы отсечь иные возможные надписи на чертеже (может умножением на 1, не знаю как это проделать, но думаю решаемо, некритичный фильтр) - вставка в местах пересечений отрезков, соответствующих критериям, блоков-засечек (но вот как ориентировать блоки?.. прямо беда-беда... как-то по тексту ориентироваться?.. мда... сложно...) - далее отбивка размеров по уже приведенному коду (видимо будет таки большой шанс получить удивительную мозаику параллельных размеров) И да, при восстановлении размеров имеющимся кодом жестко удаляется все что попало в выбор. Это, конечно, нужно иметь ввиду, а в идеале желательно научить программу игнорировать объекты, не относящиеся к размерам (мда, круто я загнул). Может есть смысл создать разновидность кода, отбивающего размеры поверх имеющихся объектов без их удаления, т.к. по факту [мне] проще руками загнать вновь отбитые размеры в отдельный слой, отключить его и почистить чертеж от разбитых размеров. Еще раз СПАСИБО за проделанную работу! |
|||
![]() |
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Отвечаю.
Программы, приведенные здесь, предназначены для ограниченного применения, а именно для случая, когда размеры было аккуратно проставлены средствами AutoCAD'а и расчленены в самом AutoCAD'е. Предполагается, что никакие другие операции (перенос всех объектов на один слой, присвоение всем объектам свойств "ByLayer" и т.п.) не выполнялись. Для разработки более продвинутых программ у меня "кишка тонка". Более того, я признаюсь, что и за эти программы я взялся, в значительной степени преследуя собственные интересы. Подобные случаи с разбитыми размерами и у меня случались, но как-то и в голову не приходило восстанавливать эти размеры, тем более, что часто файлы с такими размерами использовались просто в качестве подложки. Сейчас я думаю, что мне надо вспомнить поговорку о том, что "лучшее - враг хорошего" и остановиться на этом. Возможно, кто-нибудь и сделает лучшие варианты, но я пас. Чтобы сохранить старые объекты от разбитых размеров, можно закоментарить во второй программе строку с командой "_ERASE" вот таким образом: Код:
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Монолитная ж.б. плита перекрытия жилого этажа с консольными вылетами по периметру на высоте более 40 м. Возможно ли выполнить? | Julianna | Железобетонные конструкции | 45 | 02.10.2016 11:27 |
Inventor. Возможно ли переназначить горячие клавиши и орбиту/зум/панорамирование по принципу Solidworks? | voverrr | Прочее ПО от Autodesk | 1 | 22.05.2015 07:03 |
Как узнать какие размеры на чертеже перебиты? | dimandgy | AutoCAD | 4 | 20.10.2014 09:37 |
Автоматизированное проектирование. Возможно ли? | Gurtik | AutoCAD | 18 | 03.09.2014 10:13 |
Глобально задать стили возможно? | Marv | AutoCAD | 9 | 24.06.2009 11:08 |