Определение высот рельефа по близлежащим точкам
Передо мной открыта в автокаде, топосъемка с вертикальными отметками, нарисована трасса (инженетрные сети), естественно не попадает в отметки топосъемки, а для того чтобы начертить профиль нужна отметка высоты грунта именно в тех точках в которых проходит наша трасса.
1. Выбираем точки и отметки точек существующие
2. Выводим среднее апроксимированное значение в текстовом виде, согласно тем текстам которые были выделены.
3. Сам лисп общитывает полигон и с помощью тригонометрических функций находит высоту точки находящщейся в том полигоне выбранных точек который задал пользователь, чем больше точек тем точнее высота, но округлять до двух знаков после запятой, вместо запятой естественно должна быть точка
1. Укажите 1. точку
2. Укажите отметку 1й точки
3. Укажите 2ю точку
4. Укажите отметку 2й точки
n. Укажите точку встваки апроксимированной отметки
Буду очень длагодарен за решение проблемы, если есть варианты по улучшению или другому подходу к данной проблемы прошу сразу дать замечания, построениями профилей усиленно начал заниматься недавно.
если чем могу помочь то помогу.
__________________
инженер проектировшик с опттом программа авто гад образование высшие
Просмотров: 21961
Регистрация: 11.10.2004
Сообщений: 755
Для подобных задач надо использовать специализированное ПО. Писать самодельный ЛИСП для каждой функции просто непродуктивно.
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,280
Поскольку приходится работать на чужих компах и в разных местах, вырабатываю сам себе алгоритм работы без использования громоздких софтов. Стараюсь максимально использовать «голый» ACad. И минимизировать количество приложений.
Я бысделал так:
1) Просто поднять все точки на высоту (легче всего делать при помощи команд ToolPack, или просто вбить руками высоты в окне Properties).
2) Потом объединить все точки с известными высотами при помощи 3d_face (тоже можно сделать руками и без софта).
3) Потом останется только построить профиль. Опять же ToolPack.
Вот и всё.
Регистрация: 01.01.2007
Сообщений: 5,143
bernata, не непорядок, мне и так дают рельеф объемный, я от него сразу избавляюсь
__________________
инженер проектировшик с опттом программа авто гад образование высшие
Регистрация: 28.03.2007
Сообщений: 1,831
Вот к примеру у вас дуга (одна граница рельефа). Сама дуга в 2D. Текстом указана отметка ее начала и другим текстом — конца. напротив дуги — линия (вторая граница рельефа), в той же плоскости, то бишь, тоже 2D и тоже имеет текстовые отметки. Между этими двумя объектами находится поворот трассы, тоже 2 2D линии. Надо построить профиль по этой трассе.
Задаем дискретизацию (делим трассу на кучу точек), одинаковую для обеих границ рельефа. Определяем высоты для каждой точки границ. Из каждой n-ной точки одной границы проводим прямую к такой же точке другой границы и замеряем пересечение с трассой. В точках трассы делаем дополнительную разбивку границ рельефа так, чтобы прямые из точки на одной границе к другой проходили через точку на трассе.
Вычисляем высоты точек рельефа на трассе и вычерчиваем кривую профиля.
Ну это так, общие правила. Рисуете направление трассы (2D или 3D полилиния, рисуете одну границу рельефа, другую, включаете макрос, устанавливаете на границах рельефа отметки высот, указываете на линию направления и давите ентер.
Глубина или высота трассы определяется во втором этапе, когда вы уже видите сам профиль.
Последний раз редактировалось Supermax, 13.10.2008 в 18:18 .
LISP, C# (ACAD 200[9,12,13,14])
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
> dextron3 : А потом мужественно преодолеваешь проблемы, созданные собственноручно
__________________
Моя библиотека lisp-функций
—
Обращение ко мне — на «ты».
Все, что сказано — личное мнение.
Кулик Алексей aka kpblc |
Посмотреть профиль |
Посетить домашнюю страницу Кулик Алексей aka kpblc |
Найти ещё сообщения от Кулик Алексей aka kpblc |
Регистрация: 01.01.2007
Сообщений: 5,143
Supermax, это алгоритм, уж больно сложный. я хотел чтонибудь простого и гениального.
__________________
инженер проектировшик с опттом программа авто гад образование высшие
Регистрация: 28.03.2007
Сообщений: 1,831
А ты хочешь сам написать прогу?
Регистрация: 15.10.2008
Санкт-Петербург
Сообщений: 2
Было похожее реализовано на лиспе. В те времена работали только с Кредо или в «голом» акаде. Вот в акаде и решили малехо автоматизировать. До сих пор пользуются. Наже кусочек описания меню.
____Интерполяция____ — заголовок группы команд
Отметка по 2 точкам – вычисление и отрисовка отметки точки методом интерполяции, лежащей между двумя точками с известными отметками
Отметка по 3 точкам – вычисление и отрисовка отметки точки методом интерполяции, лежащей в треугольнике тремя точками с известными отметками
По прямой – вычисление и отрисовка отметок точек с шагом 1см методом интерполяции, лежащих на прямой между двумя точками с известными отметками
По кривой c шагом 10см – вычисление и отрисовка отметок точек с шагом 10см методом интерполяции, лежащих на ломаной линии между двумя точками с известными отметками
По кривой – вычисление и отрисовка отметок точек с шагом 1см методом интерполяции, лежащих на ломаной линии между двумя точками с известными отметками
То же, вверх – вычисление и отрисовка отметок точек с шагом 1см методом интерполяции, лежащих на ломаной линии между двумя точками по отметке первой точки с запросом уклона ко второй точке. Отметки повышаются от первой точки ко второй. По запросу отрисовка уклона и расстояния.
То же, вниз – вычисление и отрисовка отметок точек с шагом 1см методом интерполяции, лежащих на ломаной линии между двумя точками по отметке первой точки с запросом уклона ко второй точке. Отметки понижаются от первой точки ко второй. По запросу отрисовка уклона и расстояния.
____Расчет___ — заголовок группы команд
На поперечнике — по h – расчет отметки второй точки и уклона на поперечнике в плане методом подбора по отметкам первой и второй точек. Применяется, если задана отметка первой точки и надо подобрать отметку второй точки, отслеживая при этом значение уклона.
На поперечнике — по i – расчет отметки второй точки и уклона на поперечнике в плане методом подбора по отметке первой точки и уклону ко второй. Применяется, если задана отметка первой точки и надо подобрать уклон ко второй точке, отслеживая при этом ее отметку.
По лотку – расчет отметки второй точки и уклона на поперечнике в плане методом подбора по отметкам первой и второй точек. Применяется, если задана отметка первой точки и надо подобрать отметку второй точки, отслеживая при этом значение уклона. Используется для работы с уклонами по лотку проезжей части.
Водораздел – расчет и отрисовка отметки водораздела между двумя точками лотка проезжей части (между дождеприемными колодцами) и уклонов к водоразделу с двух сторон.
Как в автокаде поднять все точки на высоту
- Все форумы
- Технологический форум
- Машиностроение
- Металлургия
- Химия, нефтехимия и топливная промышленность
- Деревообработка
- Пищевая промышленность
- Животноводство, рыбоводство и растениеводство
- Другие темы
- Общие вопросы
- Промышленность стройматериалов
- Экология
- Охрана труда и техника безопасности
- Биржа труда
- Генеральные планы
- Сооружения транспорта
- Автомобильные дороги
- Железнодорожные пути
- Мостостроение
- Другие темы
- Общие вопросы
- Инженерные изыскания
- Биржа труда
- Архитектурные решения
- Дизайн интерьеров
- Ландшафтное проектирование
- Реконструкция и реставрация зданий
- Градостроительство
- Общие вопросы
- Другие темы
- Светотехника
- Биржа труда
- Основания и фундаменты, механика грунтов
- Конструкции железобетонные
- Конструкции деревянные
- Конструкции металлические
- Обследование и усиление строительных конструкций
- Ограждающие конструкции, кровли
- Общие вопросы
- Другие темы
- Строительная теплотехника
- Защита от шума и вибрации
- Программы ConstructorSoft
- Организация строительства и производства работ
- Биржа труда
- Классификация зданий, помещений и зон
- Пожарная сигнализация
- Общие вопросы
- Огнестойкость строительных конструкций
- Оповещение и эвакуация
- Водяное и пенное пожаротушение
- Газовое, порошковое и аэрозольное пожаротушение
- Дымоудаление
- Другие темы
- Огнеопасные свойства веществ и материалов
- Биржа труда
- Генерация электроэнергии
- Электрические подстанции
- Силовое электрооборудование
- Электроосвещение внутреннее
- Электроосвещение наружное
- Заземление и молниезащита
- Воздушные и кабельные ЛЭП
- Общие вопросы
- Другие темы
- Взрывозащищенное электрооборудование
- Электропривод и электрические машины
- Учёт электроэнергии
- Электропроводки и токопроводы
- Программы Beroes Group
- Релейная защита и автоматика
- Контактные сети
- Электроснабжение объектов
- Биржа труда
- Автоматика и телемеханика
- Локальные сети передачи данных
- Телевидение и радиовещание
- Общие вопросы
- Другие темы
- Телефония и другие системы связи
- Контроллеры и электроника
- Оптоволоконные сети передачи данных
- Видеонаблюдение и СКУД
- Охранная сигнализация
- Биржа труда
- Внутренние водопровод и канализация
- Наружные сети водоснабжения
- Наружные сети канализации
- Насосные станции
- Противопожарное водоснабжение
- Общие вопросы
- Другие темы
- Биржа труда
- Холодоснабжение
- Вентиляция
- Кондиционирование
- Воздухоснабжение
- Аспирация (пылеудаление)
- Общие вопросы
- Другие темы
- Биржа труда
- Тепловые станции
- Теплоснабжение
- Теплоизоляция оборудования и трубопроводов
- Тепломеханические решения котельных
- Отопление
- Устройства газоснабжения
- Общие вопросы
- Другие темы
- Биржа труда
- AutoCAD, AutoCAD LT и СПДС модуль Autodesk
- AutoCAD Civil 3D (Land Desktop), AutoCAD Map 3D и AutoCAD Raster Design
- Revit Architecture и AutoCAD Architecture
- Revit Structure, AutoCAD Structural Detailing и Autodesk Robot Structural
- Revit MEP и AutoCAD MEP
- Autodesk 3ds Max (Design), AutoCAD Freestyle и Autodesk Impression
- Autodesk Design Review, DWG TrueView, Autodesk DWF Writer, AutoCAD WS
- Autodesk Navisworks Products, Autodesk Vault Products
- AutoCAD Electrical
- AutoCAD Mechanical
- Autodesk Inventor
- AutoCAD P&ID, AutoCAD Plant 3D, Autodesk Intent
- Общие вопросы
- Другие программы Autodesk
- Общие вопросы
- Allplan
- GeoniCS
- CREDO
- Другие программы
- ArchiCAD
- DIALux
- MicroSoft Office
- nanoCAD и другое ПО от «Нанософт»
- T-Flex CAD и другое ПО от «Топ Системы»
- Компас и другое ПО от «Аскон»
- Программы Weisskrahe
- Стоимость строительно-монтажных работ
- Стоимость проектных работ
- Стоимость пусконаладочных работ
- Стоимость ремонтных работ
- Стоимость технического обслуживания
- Программное обеспечение для составления смет
- Другие темы
- Биржа труда
- Авторский надзор
- Архивы и делопроизводство
- Другие темы
- Общие вопросы
- Технический надзор
- Управление проектами
- Юридические вопросы
- Свободное общение, шутки, юмор
- Вопросы, замечания и предложения по сайтам
- Вопросы, замечания и предложения по форумам
- www.proektant.by
- Строительные калькуляторы и конструкторы
- Архив файлов
- Технологический
- Генплан и сооружения транспорта
- Архитектурный
- Строительный
- Пожарная безопасность
- Электротехнический
- Автоматизация, связь, сигнализация
- Водоснабжение и канализация
- Вентиляция, кондиционирование и холодоснабжение
- Теплоснабжение и газоснабжение
- Библиотека строительных норм и правил
- Библиотека строительства «Зодчий»
- Библиотека климатического оборудования
- Библиотека кафедры ТТГВ ТОГУ
- Все пользователи
- Кураторы подразделов
- Пользователи по регионам
- Посетившие форумы в течение суток
- Поиск пользователей
- Правила форумов
- Список всех подразделов
- Список всех тем
- Календарь
- Забыли пароль?
- Регистрация
- Помощь
ПОИСК ПО ФОРУМАМ
перед созданием новых тем используйте поиск,
возможно ответ на Ваш вопрос уже есть на форумахФорумы GIS-Lab.info
У меня имеются несколько листов топографической съемки, и набор точек (примерно 4500 шт) по маршрутам с известными координатами (x,y).
Необходимо вычислить абс. высоту каждой из этих точек.
Буду благодарен за помощь.
Сообщения: 503 Зарегистрирован: 06 июл 2012, 08:37
Репутация: 53 Откуда: Азербайджан, БакуRe: автоматическое вычисление высоты точек
Сообщение bingeomap » 28 ноя 2012, 21:26
А какие программы у вас есть?
С уважением,
Биннат Халилов
Ilmarinnen Новоприбывший
Сообщения: 12 Зарегистрирован: 13 ноя 2010, 11:42
Репутация: 1Re: автоматическое вычисление высоты точек
Сообщение Ilmarinnen » 29 ноя 2012, 07:27
AutoCad Map3d 2012
Surfer 10
Global mapper 12
mapinfo 8Это основной комплект мой. Изначально я думал, что смогу по построенному гриду в серфере снять высоты по точкам процедурой «Slice». Но, к сожалению, она выдает высоту не только в узлах, но и между ними, причем с высокой частотой, и 4500 точек превращаются в 330000 точек, среди которых, конечно, есть нужные мне. но как найти? ))
Пока что другого решения мне в голову не приходит.
Сообщения: 5286 Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015 Ваше звание: просто мимо прохожу Откуда: Ё-бургRe: автоматическое вычисление высоты точек
Сообщение trir » 29 ноя 2012, 17:23
AutoCad Map 3D к сожалению не умеет толком работать с поверхностями, зато умеет Civil 3D, но даже в нём я не знаю штатного способа получить эти значения быстро, для такого количества точек. В своё время я решал эту задачу в Access’е имея готовую TIN, но для Grid наверное будет даже проще.
Сообщения: 619 Зарегистрирован: 09 авг 2009, 13:09
Репутация: 67 Ваше звание: топограф, технолог Откуда: МааськваRe: автоматическое вычисление высоты точек
Сообщение АлексЮстасу » 29 ноя 2012, 19:47
Может быть найти все дублирующиеся точки из грида с нужными с помощью Delete Duplicates из Map->Drawing Cleanup?
В режиме Interactiv и Mark all.
Если бы эта Delete Duplicates выдавала выборку. Но хоть пометит кружочками.
И потом исхитриться грохнуть все, кроме них?Сообщения: 619 Зарегистрирован: 09 авг 2009, 13:09
Репутация: 67 Ваше звание: топограф, технолог Откуда: МааськваRe: автоматическое вычисление высоты точек
Сообщение АлексЮстасу » 29 ноя 2012, 19:48
Вообще-то должно же быть что-то типа построить модель рельефа, и положить на нее указанные элементы? В Terrasolid под MicroStation такое есть.
Сообщения: 503 Зарегистрирован: 06 июл 2012, 08:37
Репутация: 53 Откуда: Азербайджан, БакуRe: автоматическое вычисление высоты точек
Сообщение bingeomap » 29 ноя 2012, 20:25
Другие программы не знаю, но думаю только в AutoCAD Civil смогу вам помочь — есть идея. Но, для этого можете скачать хотя бы демо версию и установит?
С уважением,
Биннат Халилов
Сообщения: 4050 Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050 Ваше звание: программист Откуда: КазаньRe: автоматическое вычисление высоты точек
Сообщение gamm » 30 ноя 2012, 05:02
Ilmarinnen писал(а): Изначально я думал, что смогу по построенному гриду в серфере снять высоты по точкам.
правильно думали. Берете ваши XY, добавляете колонку с нулями (прямо в SpreadSheet Surfer-а), и идете в Grid/Residuals. Программа находит разницу между нулями и сеткой, и дописывает в табличку.
Ilmarinnen Новоприбывший
Сообщения: 12 Зарегистрирован: 13 ноя 2010, 11:42
Репутация: 1Re: автоматическое вычисление высоты точек
Сообщение Ilmarinnen » 03 дек 2012, 14:58
Джентльмены, вопрос решился. Вкратце, следующим путем:
1) Собрал покрытие в Автокаде — порядка 40 листов 5000 съемки;
2) Разрезал покрытие на три части, с некоторым перекрытием — такой шаг вызван тем, что у меня машина не справляется с построением грида по большему покрытию
3) при помощи глобал маппера по каждому покрытию построил грид с метровой ячейкой
4) каждый из гридов экспортировал в формат .asc — именно этот формат в дальнейшем корректно импортируется в мапинфо средствами Vertical Mapper
5) Скачал и установил Vertical Maper (модуль для Mapinfo), импортировал туда получившиеся гриды
5*) Из таблицы .xls добавил в Mapinfo по координатам свои точки, сохранил в отдельном .tab
6) При помощи инструмента Point Inspection для нового .tab получил координаты Z — для каждого грида повторил операцию
7) Экспортировал .tab в mif/mid, скопировал из mid набор строк, вставил в эксель, и затем в местах перекрытия отфильтровал повторы или не совсем верные результаты.Все. Точность результата порядка 1 м.
как подписать высоты точек?
Товарищи мастера АвтоКАД’а! памагите! существует план местности-тама около двух тысяч точек (так называемых пикетов) с изв. координатами x,y,z! как можно для каждой точки подписать справа от нее значение координаты z? и можно ли для горизонталей (они вроде идут как полилинии) подписать ее уровень (elevation вроде так наз-ся по англ.)?
#2 Ответ от Maxim 6 сентября 2007г. 21:48:47
Re: как подписать высоты точек?
В Автокаде не знаю. По моему это сделать нельзя. Используй Lend Desktop или Civil 3D.
#3 Ответ от Valery Brelovsky 7 сентября 2007г. 06:11:37
- Valery Brelovsky
- Активный участник
- Откуда: Израиль / Север Израиля / Кирь
- На форуме с 3 июня 2005г.
- Сообщений: 2,359
- Спасибо: 19
Re: как подписать высоты точек?
> Геодезист
Посмотри в готовых программах. А лучьше по совету Maxim (2007-09-06 21:48:47).
Если сегодня нет этих программ. Пришли точки я сделаю в Civil 3D 2006 и верну в *.DWG#4 Ответ от VVA 7 сентября 2007г. 12:25:36
Re: как подписать высоты точек?
> Геодезист
Немного доделанная программа Игоря Костюковича
Брал на http://cadhlp.kulichki.net;| ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- Преобразование кривой в изолинию : Главная программа октябрь 2003 ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+- Автор Костюкович Игорь |; (defun C:isoline (/ vla:curve lst:textParameters int:cmdEcho int:blipMode iso-drawText iso-maskText iso-getFormCurve iso-getParameters ) ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- ;;; Функция отрисовки текста вдоль формирующей кривой октябрь 2003 ;;; с использованием заданных параметров ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- ;;; Функции передается VLA-указатель формирующей кривой и список с параметрами ;;; текста изолинии ;;; В результате работы функции вдоль формирующей кривой рисуется требуемое ;;; количество текстовых строк заданной высоты и содержания. Текстовые строки ;;; располагаются вдоль кривой равномерно. ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- (defun iso-drawText (vla:curve lst:textParameters / rea:lengthOfCurve rea:lengthOfPart int:counter lst:angles lst:points vla:text ) ;; --- определение длины кривой --- (setq rea:lengthOfCurve (vlax-curve-getDistAtParam vla:curve (vlax-curve-getEndParam vla:curve) ) ;_ vlax-curve-getDistAtPoint ) ;_ setq ;; - определение длины одного участка кривой - расстояния между соседними строками --- (setq rea:lengthOfPart (/ rea:lengthOfCurve (cdr (assoc 9001 lst:textParameters)))) (setq int:counter 1) ;; --- цикл определения геометрических параметров текстовых строк --- (while ( a (* 0.5 pi)) (< a (* 1.5 pi)) ) (setq lst:angles (subst (+ a pi) a lst:angles))) ) (setq int:counter 0) ;; --- цикл рисования текстовых строк --- (while (< int:counter (length lst:points)) ;; --- создание текста --- (setq vla:text (vla-addText (vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object)) ) ;_ vla-get-ModelSpace (cdr (assoc 9003 lst:textParameters)) (vlax-3D-point (nth int:counter lst:points)) (cdr (assoc 9002 lst:textParameters)) ) ;_ vla-addText ) ;_ setq ;; --- выравнивание текста по центру --- (vla-put-alignment vla:text acAlignmentMiddleCenter) ;; --- изменение точки выравнивания текста --- (vla-put-textAlignmentPoint vla:text (vlax-3D-point (nth int:counter lst:points)) ) ;_ vla-put-textAlignmentPoint ;; --- изменение угла поворота текста --- (vla-put-rotation vla:text (nth int:counter lst:angles)) ;; --- маскировка текста --- (iso-maskText vla:text) (setq int:counter (1+ int:counter)) ) ;_ while ;; --- отключение рамок wipeout'ов --- (command "_.WIPEOUT" "_Frames" "_OFF") ) ;_ defun ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- ;;; Функция маскировки текста октябрь 2003 ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- ;;; Функции передается VLA-указатель текстовой строки, которую нужно маскировать ;;; В результате работы функция помещает между текстом и кривой wipeout, делая ;;; имитацию разрыва кривой ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- (defun iso-maskText (vla:text / lst:insertionPoint lst:maskCoordinates lst:pointOne lst:pointTwo lst:pointThree lst:pointFour rea:rotation rea:x1 rea:x2 rea:y1 rea:y2 ps ) ;; --- точка вставки текста --- (setq lst:insertionPoint (vlax-safearray->list (vlax-variant-value (vla-get-insertionPoint vla:text)) ) ;_ vlax-safearray->list ;; --- угол поворота текста --- rea:rotation (vla-get-rotation vla:text) ;; --- список координат прямоугольника, заключающего в себя текст --- ;; --- относительно начала координат --- lst:maskCoordinates (textbox (entget (vlax-vla-object->ename vla:text))) ;; --- отдельные координаты углов прямоугольника --- ;; --- относительно начала координат --- rea:x1 (car (car lst:maskCoordinates)) rea:y1 (cadr (car lst:maskCoordinates)) rea:x2 (car (cadr lst:maskCoordinates)) rea:y2 (cadr (cadr lst:maskCoordinates)) ;; --- реальные координаты углов прямоугольника, заключающего текст --- lst:pointOne (polar lst:insertionPoint (+ rea:rotation (/ pi 2.0)) rea:y1 ) ;_ polar lst:pointTwo (polar lst:pointOne rea:rotation (- rea:x2 rea:x1)) lst:pointThree (polar lst:pointTwo (+ rea:rotation (/ pi 2.0)) (- rea:y2 rea:y1) ) ;_ polar lst:pointFour (polar lst:pointThree (+ rea:rotation pi) (- rea:x2 rea:x1)) ) ;_ setq ;; --- создание wipeout'а --- (command "_.WIPEOUT" lst:pointOne lst:pointTwo lst:pointThree lst:pointFour "") ;; --- масштабирование wipout'а (+10%) для более красивого представления (vla-scaleEntity (vlax-ename->vla-object (entlast)) (vlax-3D-point (inters lst:pointOne lst:pointThree lst:pointTwo lst:pointFour ) ;_ inters ) ;_ vlax-3D-point 1.10 ) ;_ vla-scaleEntity ;; --- изменение порядка отображения объектов рисунка --- ;; --- wipeout помещается под текст --- (setq ps (getvar "PICKSTYLE")) (setvar "PICKSTYLE" 0) (command "_.DRAWORDER" (entlast) "" "_Under" (vlax-vla-object->ename vla:text) ) ;_ command (while (> (getvar "CMDACTIVE") 0)(command "")) (command "_.-group" "_C" "*" "Изолинии" (vlax-vla-object->ename vla:text) (entlast) "") (setvar "PICKSTYLE" ps) ) ;_ defun ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- ;;; Функция указания формирующей кривой октябрь 2003 ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- ;;; Функция возвращает VLA-указатель кривой, которую указал пользователь для ;;; формирования изолинии. Если выбранный примитив не подходит для создания ;;; изолинии, возвращается nil ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- (defun iso-getFormCurve (/ lst:entAndPoint ent:object str:entType result) ;; --- выбор пользователем кривой --- (if (setq lst:entAndPoint (entsel "\n Укажите формирующую кривую: ")) (progn (setq ent:object (car lst:entAndPoint) str:entType (cdr (assoc 0 (entget ent:object))) ) ;_ setq ;; --- проверка типа выбранного примитива --- (if (or (= str:entType "LINE") (= str:entType "POLYLINE") (= str:entType "LWPOLYLINE") (= str:entType "SPLINE") (= str:entType "ARC") ) ;_ or (setq result (vlax-ename->vla-object ent:object)) (progn (alert "Выбранный примитив не может быть использован в качестве формирующей кривой." ) ;_ alert (setq result nil) ) ;_ progn ) ;_ if ) ;_ progn (setq result nil) ) ;_ if result ; возврат результата выбора кривой ) ;_ defun ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- ;;; Функция указания параметров текста октябрь 2003 ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- ;;; Функция запрашивает у пользователя параметры для отрисовки текста изолинии ;;; и возвращает их в виде ассоциированного списка ;;; Коды: ;;; 9001 - количество строк (целое) ;;; 9002 - высота текста (с плавающей точкой) ;;; 9003 - содержание (строка) ;;; ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- (defun iso-getParameters (/ int:dclID str:number str:height str:text) ;; --- описание диалога содержится в файле isoline.dcl --- (if (> (setq int:dclID (load_dialog "mip_do.dcl")) 0) ;; --- имя диалога iso_getText --- (if (new_dialog "iso_getText" int:dclID) (progn ;; --- установка полям значений по умолчанию --- (setq str:text (caddr (vlax-curve-getStartPoint vla:curve))) (if str:text (setq str:text (rtos str:text 2 2))(setq str:text "")) (set_tile "number" (itoa 3)) ;_ количество строк - 3 (set_tile "height" (rtos (getvar "TEXTSIZE") 2)) ;_ высота текста - из переменной TEXTSIZE (set_tile "text" str:text) ;_ количество строк - 3 ;; --- действия по кнопке OK --- (action_tile "accept" (strcat "(setq str:number (get_tile \"number\"))" "(setq str:height (get_tile \"height\"))" "(setq str:text (get_tile \"text\"))" "(done_dialog)" ) ;_ strcat ) ;_ action_tile ;; --- действия по кнопке Cancel --- ;; --- всем параметрам присваиваются недопустимые значения --- (action_tile "cancel" (strcat "(setq str:number \"0\")" "(setq str:height \"0.0\")" "(setq str:text \"\")" "(done_dialog)" ) ;_ strcat ) ;_ action_tile (start_dialog) (unload_dialog int:dclID) ) ;_ progn (alert "Не найдено описание диалога \"iso_getText\"") ) ;_ if (alert "Не найден файл диалога \"mip_do.dcl\"") ) ;_ if ;; --- формирование результирующего списка --- (list (cons 9001 (atoi str:number)) (cons 9002 (atof str:height)) (cons 9003 str:text) ) ;_ list ) ;_ defun (vl-load-com) ;; --- подавление командного эха и маркерных меток --- (setq int:cmdEcho (getvar "CMDECHO") int:blipMode (getvar "BLIPMODE") ) ;_ setq (setvar "CMDECHO" 0) (setvar "BLIPMODE" 0) ;; --- выбор формирующей кривой для преобразования в изолинию --- (if (setq vla:curve (iso-getFormCurve)) (progn ;; --- ввод параметров текста --- (setq lst:textParameters (iso-getParameters)) ;; --- минимальные проверки --- (if (and (> (cdr (assoc 9001 lst:textParameters)) 0) ; количество строк - больше 0 (> (cdr (assoc 9002 lst:textParameters)) 0.0) ; высота текста - больше 0 (> (strlen (cdr (assoc 9003 lst:textParameters))) 0) ; длина строки - больше 0 ) ;_ and ;; --- отрисовка текста --- (iso-drawText vla:curve lst:textParameters) (alert "Невозможно подписать изолинию по Вашим данным.") ) ;_ if ) ;_ progn ) ;_ if ;; --- восстановление командного эха и маркерных меток --- (setvar "CMDECHO" int:cmdEcho) (setvar "BLIPMODE" int:blipMode) (prin1) ) ;_ defun
Файл mip_do.dcl
iso_getText : dialog < label = "Текст изолинии" ; : boxed_column < label = "Текст:" ; : edit_box < edit_width = 10 ; key = "number" ; label = "Количество:" ; mnemonic = "К" ; >: edit_box < edit_width = 10 ; key = "height" ; label = "Высота:" ; mnemonic = "В" ; >: edit_box < edit_width = 10 ; key = "text" ; label = "Содержание:" ; mnemonic = "С" ; >spacer_1 ; > ok_cancel ; >
Вызов команды isoline
Как загрузить лисп здесь http://dwg.ru/art/8#5 Ответ от Геодезист 7 сентября 2007г. 20:03:05
Re: как подписать высоты точек?
огого 🙂 будем пробовать, спс бальшое! если не получицца то обращусь к Valery Brelovsky!
#6 Ответ от shishoq 7 сентября 2007г. 23:07:39
Re: как подписать высоты точек?
стойте! есть ищё идея
нужно: ToolPac и QACAD.
В первом есть фича DSTP_BLKPLTPT (вставить блоки по объектам), во втором — фича отметок высот БЕЗ контрольных точек (в отличие от Акада, где все размеры и «ординаты» мерюются между двумя точками).
Сценарий:
1) вставляем блок отметки высоты из QACAD в чертёж.
2) с помощью TP > Blocks > Insert > OnObject групповым выбором (!) размножаем наш блок отметки по имеющимся точкам.
3) вставляем контрольный блок отметки в 0,000
4) с помощью QACAD > Внемасшт.Элементы > ПересчётОтметок пересчитываем все высоты групповым выбором (!)
5) радуемся жизни!
все остальные действия по повороту текста, изменению вида блока, уплощению чертежа — учить, думаю, не надо.
Пытался заблочивать простой линейный размер с тем, чтобы потом группой их разбить и дотянуть до контрольной «нулевой» линии, (т.е. без QACADа) — всё бы хорошо, но скопом Extend на размеры не действует только поодиночке. Stretch вообще не д. Ассоциативность размеров при разбиении теряется. Может, в ТулПаке есть ещё что, но я пока не нашёл.
- Технологический форум