|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
А ничего, что выходные вообще-то были?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
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
Сообщений: 84
|
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 |