Реклама i
|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Замена примитивов (отрезков) на блоки
Регистрация: 31.03.2019
Сообщений: 13
|
||
Просмотров: 15223
|
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Поскольку смысл этого действия (замена отрезков на блоки) не раскрыт, то как вариант:
1. Сделать динамический блок в виде симметрично растягивающегося относительно центра отрезка (со скрытыми ручками) и с динпараметром поворота. 2. Получаете из отрезка его длину и угол поворота, а также координаты середины отрезка. Затем вставляете блок и задаете его динпараметры значениями из отрезка. И после удаляете отрезок. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Дополню, можно выгрузить данные из линий в Excel, немного посчитать... и пакетно вставить дин блоки с соответствующими настройками (DynIn).
|
|||
![]() |
|
||||
Регистрация: 27.12.2011
Сообщений: 1,456
|
Не знаю, правильно ли понял, но набросал простенький лисп.
Код:
PS Возможен еще вариант, более правильный: создать в файле блок из отрезка длиной 1 и пакетно заменить им отрезки, а то здесь слишком много блоков получается, это нерационально. Может, лучше разместить тему в разделе программирования, там наверняка помогут. Последний раз редактировалось Oleg T, 01.04.2019 в 08:42. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Регистрация: 31.03.2019
Сообщений: 13
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 31.03.2019
Сообщений: 13
|
Забыл добавить один из важных моментов. Есть СТО Газпром газораспределение 2.7-2013. И все блоки должны быть вставлены именно в таком виде, в котором они были предоставлены организации. То есть в данном случае его нельзя изменять. Он только растяжимый. Файл блока прикрепил. l0.dwg
И спасибо всем, кто ответил. Буду пробовать все предложенные вами способы. Будут вопросы - напишу. Последний раз редактировалось Deutschland, 01.04.2019 в 21:06. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
чудоблок - на динпараметр поворота уже сил не хватило, видимо) И точка вставки не в центре блока-отрезка. Ну все равно алгоритмом остается почти прежним - только цепляетесь к одной из конечных точек "входного" отрезка как точки вставки.
----- добавлено через ~2 ч. ----- и откуда берутся данные для двух атрибутов в блоке? вручную вводить - это сразу хороший минус в скорости... |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Какой хороший блок, человек делавший его явно мастер, так просто и так элегантно повысить сложность автоматизации, это надо уметь. То, что это получилось случайно, я ни в жисть не поверю. Я прямо таки в восторге.
Deutschland, спасибо Вам большое, за то, что поделились. |
|||
![]() |
|
||||
Регистрация: 19.07.2005
Россия
Сообщений: 3,288
|
|
|||
![]() |
|
||||
коряво растяжимый
![]() я внёс коррекцию только в растяжение, Offtop: ну и как водится короткий лисп. перед использованием нужно переопределить блок в чертеже на нижеприлагаемый. атрибуты у вставленных блоков пустые. Код:
|
||||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
koMon, а ведь условия против изменения блока...
Цитата:
VitalyAF, и зачем это? |
|||
![]() |
|
||||
Регистрация: 19.07.2005
Россия
Сообщений: 3,288
|
Та же линия с атрибутами в виде дин. блока,
только более функциональная. Переименуй атрибы и пользуйся! https://i.postimg.cc/4x7bT1zw/KM-Element.gif |
|||
![]() |
|
||||
Регистрация: 31.03.2019
Сообщений: 13
|
Мне решили ещё усложнить задачу до поры до времени... Вы наверное задаётесь вопросом зачем ему это всё надо? У нас в организации прошла проверка, в ходе которой сделали замечание. Мол, вместо отрезков должны быть блоки. Заставили переделывать. Только над одним куском схемы я корпел чуть больше рабочей недели. Всё, чем я занимался - это вручную удалял эти отрезки и вставлял блоки. А переделывать схему придётся для целого города.
Буквально сегодня проверяющий дал нам блок (обычный блок). Он даже не динамический (не растягивается - ничего!) Будем добиваться адекватных блоков. Но пока что придётся работать именно с таким (прикрепил файл). И теперь я смотрю длину отрезка, удаляю его, вставляю блок, указываю длину, поворачиваю его и свожу с другим и так по цепочке. Очень кропотливая работёнка. Но можно ли как-то и из этой ситуации выкрутиться, чтобы заменить отрезки на блоки (с такими же длинами, поворотами и т.д.) пакетно или ещё как-нибудь упростить работу? |
|||
![]() |
|
||||
Регистрация: 31.03.2019
Сообщений: 13
|
А что это за лисп такой, чем он поможет? Активировал, пробую что-то выделять - реакции ноль.
И в чём блок был корявый, скажите пожалуйста. Я с AutoCAD не так давно знаком, многих нюансов не знаю ещё. Последний раз редактировалось Deutschland, 02.04.2019 в 19:14. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
точку вставки перенести в середину блока, там же сделать динамический поворот блока. И растяжение от центра блока. Тогда даже вручную было бы проще - вставляется блок с привязкой к середине отрезка, затем он ручкой разворачивается до совпадения с отрезком, другой ручкой растягивается до конца заменяемого отрезка. А то, что вам дали, это действительно:
причем даже не автоматизации, а просто работы. |
|||
![]() |
|
||||
Регистрация: 08.12.2018
Сообщений: 164
|
Для Deutschland.
В приведенном файле-блоке используется полилиния, а не отрезок (LINE). Вот заготовка для однократной замены отрезка блоком. Скопировать текст в буфер, вставить в командную строку и нажать Enter. Блок уже должен быть в текущем файле. Код:
|
|||
![]() |
|
||||
Регистрация: 31.03.2019
Сообщений: 13
|
Цитата:
![]() |
|||
![]() |
|
||||
Регистрация: 08.12.2018
Сообщений: 164
|
В моей заготовке пока подразумевается объект, у которого есть свойства "длина" ("Length") и "угол поворота"("angle"). У полилинии таких свойств нет. С другой стороны, если применить программу к отрезку, то он заменяется блоком и повторно применять программу к нему бесполезно. К тому же автор темы постоянно упоминает понятие "отрезок". Я написал именно заготовку программы Если она устроит автора темы, то её можно будет довести до финала.
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Регистрация: 31.03.2019
Сообщений: 13
|
Цитата:
----- добавлено через ~6 мин. ----- И раз разговор зашёл про полилинии - в схеме намешано всё подряд, где встречаются как отрезки, так и полилинии, которые и нужно заменить на один блок. |
|||
![]() |
|
||||
Регистрация: 08.12.2018
Сообщений: 164
|
Тогда попробуй начерти ОТРЕЗОК (LINE) и примени к нему программу. Скопируй сюда протокол выполнения по F2.
Сделай то же самое с твоим объектом и тоже скопируй сюда протокол. Не помешал бы и оригинальный файл (или его фрагмент). Но если страна нахождения - Германия, то я пас. |
|||
![]() |
|
||||
Регистрация: 31.03.2019
Сообщений: 13
|
Цитата:
Выполняется регенерация модели. Утилиты меню AutoCAD загружены. Команда: Команда: Команда: <Сетка откл> Команда: Команда: Команда: _insert Точка вставки или [Базовая точка/Масштаб/Поворот]: Введите значения атрибутов SN: Идентификатор: Команда: Команда: Команда: _line Первая точка: Следующая точка или [оТменить]: Следующая точка или [оТменить]: Команда: (progn (_> (setvar "ATTDIA" 0) (_> (setvar "ATTREQ" 1) (_> (setq otr (car (entsel "\nВыберите отрезок: "))) (_> (setq votr (vlax-ename->vla-object otr)) (_> (setq tvs (cdr (assoc 10 (entget otr)))) (_> (setq dlina (vlax-get-property votr 'Length)) (_> (setq ugol (/ (* 180(vlax-get-property votr 'angle)) pi)) (_> (entdel otr) (_> (vl-cmdf "_-INSERT" "l0" "X" dlina "Y" "1" "Z" "1" "_R" ugol tvs "" "") (_> (setvar "ATTDIA" 1) (_> (setvar "ATTREQ" 0) (_> ) Выберите отрезок: ; ошибка: no function definition: VLAX-ENAME->VLA-OBJECT Открывается файл формата AutoCAD 2013. Выполняется регенерация модели. Утилиты меню AutoCAD загружены. Команда: Файл Autodesk DWG. Это файл формата TrustedDWG, сохраненный в приложении Autodesk или в приложении, лицензированном корпорацией Autodesk. Команда: Команда: (progn (_> (setvar "ATTDIA" 0) (_> (setvar "ATTREQ" 1) (_> (setq otr (car (entsel "\nВыберите отрезок: "))) (_> (setq votr (vlax-ename->vla-object otr)) (_> (setq tvs (cdr (assoc 10 (entget otr)))) (_> (setq dlina (vlax-get-property votr 'Length)) (_> (setq ugol (/ (* 180(vlax-get-property votr 'angle)) pi)) (_> (entdel otr) (_> (vl-cmdf "_-INSERT" "l0" "X" dlina "Y" "1" "Z" "1" "_R" ugol tvs "" "") (_> (setvar "ATTDIA" 1) (_> (setvar "ATTREQ" 0) (_> ) Выберите отрезок: ; ошибка: no function definition: VLAX-ENAME->VLA-OBJECT |
|||
![]() |
|
||||
Регистрация: 08.12.2018
Сообщений: 164
|
Как-то я привык уже, что в AutoCAD 2013 и в следующих версиях загрузка функций VLisp (vl-load-com) происходит автоматически. Возможно, это у меня так происходит.
Частная задача: замена отрезка блоком l0. Код:
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Если в образце красным кружком обозначен примитив, к которому применяется программа - то ТС может применять программу хоть до посинения: там полилиния) А так какая то пассивная позиция у ТС - хочет сэкономить много человекочасов, но при этом лениться даже корректные входные условия выдать сразу: почти половина линейных примитивов в образце - полилинии.
|
|||
![]() |
|
||||
Регистрация: 08.12.2018
Сообщений: 164
|
Ну, до посинения он не буде доходить, программа выдаст сообщение, что объект не отрезок. Я специально не стал вводить в программу расчленение полилинии (а вдруг там нужна именно полилиния). Однако, будь то полилиния или отрезок - этот объект все равно должен удалиться и на его месте должен оказаться блок. А что там в блоке (а там полилиния) - это не нашего ума дело.
![]() Непонятно также назначение атрибутов. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
так задавал уже: но ТС видит только то, что ему нужно, похоже) |
|||
![]() |
|
||||
Регистрация: 08.12.2018
Сообщений: 164
|
Что это вы постоянно упоминаете какого-то ТС? Нет здесь никакого ТС. Я общаюсь с автором темы Deutschland и жду от него реакции. Если вы решили подменить собой автора темы, то вам и карты в руки. Дорабатывайте программу по своему разумению. А еще лучше - пошлите автора темы в раздел "Поиск исполнителей".
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
Offtop: А указывать, что другим делать - будете на своем форуме, если хватит способностей раскрутить его до уровня dwg.ru, чтобы там появились люди |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
ИМХО, ветка уже давно переросла раздел Autocad, т.к. штатными средствами автоматизировать работу у ТС не получится и нужно писать соответствующую программу. Самому или привлекая помощь, а т.к. с программированием у автора судя по всему не очень, то....
это не самый плохой совет. ЗЫ. А полилинии или линии особой разницы нет, _explode все уравняет =) Последний раз редактировалось Boxa, 04.04.2019 в 10:57. |
|||
![]() |
|
|||||
Регистрация: 31.03.2019
Сообщений: 13
|
Цитата:
Цитата:
Цитата:
----- добавлено через ~9 мин. ----- Цитата:
![]() 1. На данный момент вставляется блок, который я загружал сюда последним. Можно ли заменить вставляемый блок, на динамический (тот, который я скидывал в тему ещё ранее)? 2. Реально ли написать такой код, чтобы применять его не разово? Выделить все отрезки на схеме и сразу всё заменить на данный блок. Последний раз редактировалось Deutschland, 04.04.2019 в 12:05. |
||||
![]() |
|
||||
Boxa, да я блок и не менял. у него проблема с точкой вставки. упорядочил) а вообще за такие дин. блоки железной линейкой по рукам самое то)
Цитата:
Цитата:
2. выделять нужно отрезки 3. лисп заменяет выбранные отрезки на дин. блок i0. удобнее будет с точкой вставки на конце линии (в блоке кстати полилиния непонятно нафик) и углом поворота относительно точки вставки. |
||||
![]() |
|
||||
Регистрация: 31.03.2019
Сообщений: 13
|
Цитата:
Из протокола: Команда: LINE_DBLOCK ; ошибка: no function definition: VLAX-GET-ACAD-OBJECT Добавил в начале лиспа: Код:
Последний раз редактировалось Deutschland, 04.04.2019 в 21:03. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Цитата:
Код:
Последний раз редактировалось koMon, 05.04.2019 в 09:25. |
||||
![]() |
|
||||
|
||||
![]() |
|
||||
Попалось такое приложение для создания схем сетей газораспределения в AutoCAD и BricsCAD. Не копал - поддерживают ли приложение, можно ли заменять линии на блоки и пр.
Просто в копилку ТС - вдруг пригодится.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Регистрация: 31.03.2019
Сообщений: 13
|
Ответьте пожалуйста, что необходимо изменить в коде, чтобы отрезки были заменены не на этот динамический блок, а на обычный (статический). Блок прикрепил.
|
|||
![]() |
|
||||
Цитата:
Код:
Последний раз редактировалось koMon, 26.04.2019 в 15:43. |
||||
![]() |
|
||||
Offtop: Общие соображения на эту тему: Дополнительные, описательные данные в атрибутах.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Offtop: И что это дает для ТС?) Как вы не поймете - кто хотел автоматизировать процесс, тот уже это сделал и продолжает над этим работать. А у многих фирм сейчас в штате зачастую нет людей - кто смог бы заняться организационными вопросами, предшествующими самому процессу автоматизации. А вы все пытаетесь реанимировать свою идею присоединенных данных, опоздав лет на 10 минимум для монетизации этого процесса)
|
|||
![]() |
|
||||
Offtop: Дас ист фантастиш, но вдруг кто-нибудь образумится? Вдруг заказчики перестанут требовать кантовать круглое и катать квадратное?
Забыл еще написать. Из СТО: Цитата:
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Регистрация: 02.01.2021
Сообщений: 2
|
Цитата:
Здравствуйте. Подскажите, а можно ли сделать так, что бы динамический блок, заменяя линию, принимал ту же длину, что и линия? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как изменить цвет выбранных примитивов? Замена цвета объектов в autocad (с помощью autolisp). | Halfback | LISP | 8 | 24.12.2018 20:52 |
Как изменить свойства примитивов в блоках стандартных размерных стрелок | philja | AutoCAD | 6 | 05.02.2016 01:22 |
AutoCAD MEP 2014: Откуда возникли непонятные блоки и стили в новом блоке? | Новичёк | Вертикальные решения на базе AutoCAD | 7 | 14.12.2015 11:09 |
Различие функции поиск и замена (команда _find) последних версий AutoCad | WeMaN | AutoCAD | 18 | 30.05.2013 13:40 |