Здравствуйте! Помогите "мазохисту" поневоле: Нужен лисп, позволяющий создавать точки с высотной отметкой, как у рядом стоящего текста/мтекста. Встречал макрос, делающий это автоматом, вычисляя ближайший текст. Однако у меня это не проходит: во-первых, тексты часто стоят не там, где нужно для автоматизированной работы макроса. Во-вторых, там высоту меняет уже существующая точка, а мне нужно её создать. Поэтому и мазохист, делать приходится ручками, своим мозгом определяя нужные тексты высотных отметок. Итак, работа макроса и условия: Указать курсором текст (мультитекст), с возможностью распознавания и точки и запятой, затем указать место вставки создаваемой точки автокада, которая должна иметь высоту Z выбранного значения текста (мультитекста). С привязкой и без привязки (при активности опции привязки в Автокад). Созданные точки Автокад и использованный текст (мультитекст) должны присваиваться текущему слою Автокад со свойствами «Послою», в том числе при выключенном слое (должны скрываться). Встречаются отметки с текстом, например "141,23 (люк)" или иные. Макрос должен распознать такую отметку и подсветить её красным (чтобы пользователь обратил особое внимание), после чего обработать её как и остальные отметки, то есть после создания точки перенести и созданную точку, и отметку с текстом на текущий слой. Обеспечить повторяемость цикла команды; завершение цикла команд – «Esc». Система координат - мировая. Автокад 2013-2019. Заранее благодарен тому, кто потратит для меня своё время, тем самым улучшив свои навыки в программировании.
Спасибо за ответ. Мой товарищ владеет Civil 3D, однако он сказал, что именно такой команды там нет. Если он ошибается, прошу Вас, подскажите наименование команды, исполняющей в точности то, что мне надо, и где, в какой панели искать. Сам я владею лишь автокадом, поэтому мне хотелось бы иметь такой макрос для автокада.
Плохо владеет ваш товарищ, Можно через _AeccMoveTextToElevation (текст на отметку в цивиле) как вам сказали выше Но я бы командой "данныеизв" в экселе убрал бы люки, поменял запятые на точки , выудил бы координаты и сделал бы обычный текстовый файл (PNEZD) и далее в цивил.
Neznayka, ты подгрузишь отметки с координатами привязки текста, а ТСу надо самостоятельно указать курсором место вставки отметки. Вот именно такой команды нет.
Ну правильно, а дальше врукопашную, пусть расставляет/крутит как душе угодно, И в лиспе бы пришлось руками. Не думаю , что был бы сильный выигрыш от лиспа
Alexandr-GR, спасибо, работает почти как надо. Осталась малость: нужно, чтобы после создания точки не только сама точка, но и текст, с ней связанный, переходил бы на текущий слой. Так будет проще контролировать уже использованные тексты высотных отметок.
Текст-отметка переносится на текущий слой. Повторный запуск - набрать 11 (одиннадцать) и нажать Enter
Alexandr-GR, прошу извинить, но нужно, чтобы текст переходил на текущий слой лишь после создания точки. Задумано так, что текущий слой будет выключенным и, соответственно, обработанные тексты с созданными точками постепенно будут скрываться. Так легче осуществлять контроль за своими же действиями. В Вашем последнем варианте текст уже удалён, а точка ещё не поставлена. В этом случае можно ошибиться, так как рядом, наползая друг на друга, толпятся стадом другие тексты-отметки. Мне хотелось бы, чтобы нужный текст исчезал бы только вместе с точкой. Спасибо. --- Сообщения объединены, 13 май 2019, Оригинальное время сообщения: 13 май 2019 --- ivsem, спасибо, макрос годится, но тут хочется, чтобы текст типа "142,32 лоток", то есть с буквами, при выборе окрашивался бы красным. И ещё: сообщите, какую команду вводить в ком.строку для запуска макроса, а то мне приходится каждый раз загружать его.
Очень да же хорошая задумка. Именно под эту задумку я и писал макрос. Красный цвет для отметок типа 142,32 лоток добавлю в следующую версию программы. После загрузки макрос самозапускается. Для последующих запусков макроса нужно набрать число 11 (одиннадцать) и нажать Enter, то есть нажать на цифровой клавиатуре два раза единицу и далее нажать Enter. Как по мне, набрать число 11 значительно быстрее, нежели переключаться в латинскую раскладку и набирать комбинацию из букв.
ivsem, "11" набрать недолго. Однако, после нескольких иных действий, других команд (с другими макросами, или просто с примитивами: перемещение, копирование, удаление, выравнивание и пр.) набор "11" уже не работает, и приходится заново загружать макрос. Поэтому предпочитаю набирать короткую команду в ком.строке. _____________________ Опа! А сейчас получилось. По набору "11" всё получилось. Прошу извинить за безосновательную претензию. p.s. Не могли бы Вы выложить файл с расширением .lsp? Хочется покопаться в коде, попробую разобраться в основных вещах. Спасибо.
Alexandr-GR, сейчас текстовая отметка переходит на текущий слой вовремя, вместе с точкой. Но отметка со словом, типа "152,23 лоток", - окрашивается в красный поздно, уже при переходе на текущий слой. А необходимо, чтобы окрашивалась сразу при клике на текст, ещё до создания точки. Тогда пользователь обратит внимание на такую отметку со словом. И - та же просьба, что и форумчанину ivsem - если не гос. тайна, не могли бы Вы выложить макрос в расширении .lsp? Хочу посмотреть код, попытаться разобраться. Спасибо.
Код: ;;;Версия 02 13.05.2019 (defun *error* (errmsg) (setvar "osmode" osmode_old)(princ) ) ;;;---------------------------------------------------------------- (defun C:11 (/) (setvar "cmdecho" 0)(vl-load-com) (setq osmode_old (getvar "osmode")) (While (setvar "osmode" 0) (setq Primitiv (car(entsel "\nВыберите мышкой текст-отметку Выход-Esc "))) (setq PrimitivDXF (entget Primitiv)) (if (or(= (cdr(assoc 0 PrimitivDXF)) "TEXT")(= (cdr(assoc 0 PrimitivDXF)) "MTEXT")) (progn (setq Z$ (cdr(assoc 1 PrimitivDXF))) (if (wcmatch Z$ "#*") (progn (if (vl-string-position 44 Z$ )(setq Z$(vl-string-subst "." "," Z$))) (setq Z(atof Z$)) (if(wcmatch Z$ "*@*")(command "_change" Primitiv "" "_P" "_C" 1 "")) (setvar "osmode" osmode_old) (setq XYmat (getpoint "\nУкажите мышкой точку : ")) (setvar "osmode" 0) (command "_point" (list (car XYmat)(cadr XYmat)Z)) (command "_change" Primitiv "" "_P" "_LA" (getvar "CLAYER") "") ) (alert "\nВыбран текст без отметки!!!") ) ) (alert "\nЭто не текст!!!") ) ) ) (C:11)
поправил увы, но нет. Я не выкладываю коды, которые содержат функции других авторов, тем более, когда бывает вношу в них свои изменения
ivsem, благодарю. И за макрос, и за код. Alexandr-GR, понимаю и уважаю Ваш выбор. Хотя часто встречал и сам делаю так (в макросах VBA Excel): чужие строки кода или функции комментирую отдельной строкой с указанием источника, откуда повзаимствовал. Благодарю за Ваш макрос. Оффтоп (Move your mouse to the spoiler area to reveal the content) Обожаю Коломбо! По двадцать пять раз пересматриваю сериал :)
ivsem, 1958, barabashkasathalex, здравствуйте. Ещё раз спасибо за надстройки для автоматического разворота стрелок. Снова понадобилось воспользоваться ими и столкнулся с проблемой. Сделал заготовку для исполнительной, а блок-стрелку использовал другую. Точка встаки блока - край объекта, а разворот нужен относительно геометрического центра. Возможно ли такое реализовать? Заготовку в DWG 2007 прикладываю.