| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Можно ли при извлечении данных полилиний задать порядок, исходя из координат?

Можно ли при извлечении данных полилиний задать порядок, исходя из координат?

Ответ
Поиск в этой теме
Непрочитано 12.06.2014, 18:57 #1
Можно ли при извлечении данных полилиний задать порядок, исходя из координат?
Scorpio_Music
 
Регистрация: 10.11.2013
Сообщений: 43

Доброго времени суток.
У меня есть план железнодорожных путей. Все пути представляют собой составные полилинии (из дуг и отрезков). Мне необходимо извлечь данные о длинах полилиний, при этом сохранив порядок (от начала пути к концу), т.е. все расстояния должны идти по порядку, согласно плану.
В "Извлечении данных" предполагается сортировка по координатам, но только для дуг, отрезков, а при извлечении полилиний из всей геометрии высвечивается лишь длина. Взорвать полилинии, получив простые примитивы, нельзя. В противном случае я получу огромный список размеров всех составных частей полилиний, а их суммирования исопоставление с существующими длинами займёт на порядок больше времени. Образмерить полилинии выбрав объект я также не могу, так как составные линии воспринимаются автокадом как разные объекты (дуги, отрезки) соединённые между собой. Однако в свойствах каждой полилинии прописывается длина, которую мне необходимо извлечь исходя из положения линии в пространстве.
Таким образом я могу получить список всех длин полилиний, но в произвольном порядке, который сделает автокад, что мне не подходит. Существуют ли решения данной задачи?
Заранее благодарю.

Последний раз редактировалось Scorpio_Music, 12.06.2014 в 19:02.
Просмотров: 5712
 
Непрочитано 12.06.2014, 19:28
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


думаю, программно если только.. поскольку отрезки и дуги имеют законченное число узлов и их однозначную взаимную ориентацию - и поэтому у них есть координаты центра при выборке. А полилиния - произвольная. Да и полностью программно тоже, наверно, не для всех случаев.
Сергей812 вне форума  
 
Автор темы   Непрочитано 12.06.2014, 19:46
#3
Scorpio_Music


 
Регистрация: 10.11.2013
Сообщений: 43


Можно ли образмерить полилинии целиком? Параллельный, линейный, быстрый - всё не то, лишь сегментно позволяют (а с учётом наклона линий, так только параллельный). Но необходимо получить полный размер полилинии, который прописывается в свойствах, но как его оттуда извлечь не прибегая к панели свойств?
Если смогу образмерить, то останутся мелочи уже: взорвать размеры, изолировать текст, расположить вдоль оси х и далее извлечение сработает
Scorpio_Music вне форума  
 
Непрочитано 12.06.2014, 19:57
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Цитата:
Сообщение от Scorpio_Music Посмотреть сообщение
но как его оттуда извлечь не прибегая к панели свойств?
Полем.
Цитата:
Сообщение от Scorpio_Music Посмотреть сообщение
взорвать размеры
На фига?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.06.2014, 20:05
#5
Scorpio_Music


 
Регистрация: 10.11.2013
Сообщений: 43


Потому что при извлечении данных параллельный размер будет просто параллельный размером из которого нельзя вытащить НИЧЕГО, кроме количества и типа объекта.
На счёт поля, будьте добры, чуть подробней расскажите.
Scorpio_Music вне форума  
 
Непрочитано 12.06.2014, 20:45
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


LISP. Вставка в таблицу поля, соотвествующего площади примитива
Посмотри #3 там есть длина. Посмотри всю тему, может еще что-то было

----- добавлено через ~2 ч. -----
Вспомнил про еще одну тему. Там вставка длины и полем и текстом и гиперссылкой.
Добавление в чертеж длины полилинии
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 12.06.2014, 23:40
#7
Scorpio_Music


 
Регистрация: 10.11.2013
Сообщений: 43


Премного благодарен за содействие) Последняя ссылка вполне устраивает
Scorpio_Music вне форума  
 
Непрочитано 13.06.2014, 07:43
#8
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Цитата:
Сообщение от Scorpio_Music Посмотреть сообщение
Премного благодарен за содействие) Последняя ссылка вполне устраивает
А если говорить о ж.д. путях, то возможно нужно воспользоваться не просто Автокадом, а к примеру Civil_лом, где можно получить не только таблицу кривых и прямых, а также продольный профиль и поперечники и соответственно объёмы.
Valery Brelovsky вне форума  
 
Автор темы   Непрочитано 14.06.2014, 11:00
#9
Scorpio_Music


 
Регистрация: 10.11.2013
Сообщений: 43


Уважаемые программеры)
Вложил 2 лиспины. Первая tlen1 позволяет выводить размер полилинии текстом рядом с полилинией. Другая Elen позволяет суммировать длины полилиний и выводит их только в командной строке автокада. Можно ли их как-то скрестить и заставить Elen выводить сумму длин текстом как это позволяет Tlen1 буду крайне признателен, если хотя бы подскажите где искать решение
Вложения
Тип файла: lsp tlen1.lsp (2.0 Кб, 62 просмотров)
Тип файла: lsp AsmiTools_Elen.lsp (3.9 Кб, 45 просмотров)
Scorpio_Music вне форума  
 
Непрочитано 14.06.2014, 11:28
#10
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


В качестве подсказки (поскольку работаю на NetApi, а не lisp):
В AsmiTools_Elen.lsp отвечает за вывод на консоль результата строки:
Цитата:
(princ(strcat "\n<<< Total entities: "(itoa(length entList))
", Total length: "(rtos totLen) " >>> "))
и соответственно, в tlen1.lsp за выбор точки вставки отвечает строка:
Цитата:
(setq pt (getpoint "\nТочка вставки результата <Отмена> : "))
в соответствующей обвязке (судя по vl-catch-all-error - обработчик ошибок). Затем полученное значение координат точки вставки pt используется в коде вставки:
Цитата:
(vla-startundomark adoc)
(loc:unhighlight ent)
(vla-addtext
(vla-objectidtoobject adoc (vla-get-ownerid ent))
(rtos (vla-get-length ent) 2)
(vlax-3d-point pt)
1.5;
) ;_ end of vla-AddMText
(vla-endundomark adoc)
во vla-addtext нужно заменить аргументы на результат вычисления общей длины из первой цитаты, оставив при этом координату вставку (vlax-3d-point pt)
Сергей812 вне форума  
 
Автор темы   Непрочитано 14.06.2014, 11:32
#11
Scorpio_Music


 
Регистрация: 10.11.2013
Сообщений: 43


Благодарю, буду пробовать
Scorpio_Music вне форума  
 
Автор темы   Непрочитано 14.06.2014, 11:39
#12
Scorpio_Music


 
Регистрация: 10.11.2013
Сообщений: 43


Что-то не так. Пишет после выбора полилиний "ошибка: неверный тип аргумента: VLA-OBJECT nil"
Лиспину прилагаю
Вложения
Тип файла: lsp AsmiTools_Elen2.lsp (4.1 Кб, 32 просмотров)
Scorpio_Music вне форума  
 
Непрочитано 14.06.2014, 12:00
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


nil - это значит, что просто объект не был инициализирован (по аналогии с Null в C#). Ищите объекты/переменные, к которые лишь есть обращения за значением в коде. А строк, выполняющих заполнение их значениями - нет. Естественно, инициализация переменных должна идти перед обращениям к ним.

Последний раз редактировалось Сергей812, 14.06.2014 в 12:12. Причина: уточнение
Сергей812 вне форума  
 
Автор темы   Непрочитано 14.06.2014, 12:17
#14
Scorpio_Music


 
Регистрация: 10.11.2013
Сообщений: 43


Обновляю вопрос во избежании путаницы.
Уважаемые программеры)
Вложил 2 лиспины. Первая tlen1 позволяет выводить размер полилинии текстом рядом с полилинией. Другая Elen позволяет суммировать длины полилиний и выводит их только в командной строке автокада. Можно ли их как-то скрестить и заставить Elen:
1) выводить сумму длин в командную строку (что она и так делает)
2) но и текстом с указанием точки вставки, как это позволяет Tlen1.

Решение сам не найду, ибо далёк от лиспа) Очень прошу помочь.
Заранее благодарю всех откликнувшихся.
Вложения
Тип файла: lsp AsmiTools_Elen.lsp (3.9 Кб, 34 просмотров)
Тип файла: lsp tlen1.lsp (2.0 Кб, 34 просмотров)
Scorpio_Music вне форума  
 
Непрочитано 16.06.2014, 12:12
#15
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


добавить в начало
Код:
[Выделить все]
 (setq adoc (vla-get-activedocument (vlax-get-acad-object))
         *mspace* (vla-get-ModelSpace adoc))
в конец
Код:
[Выделить все]
 (vla-AddText *mspace* (rtos totLen 2 2) (vlax-3d-point (getpoint "\nУкажите точку вставки: ")) 2.5)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...

Последний раз редактировалось Vladimir_Sergeevich, 16.06.2014 в 14:33.
Vladimir_Sergeevich вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Можно ли при извлечении данных полилиний задать порядок, исходя из координат?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
SCAD Office 21.1. Обсуждение. Клименко Ярослав SCAD 633 03.10.2015 14:10
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47
Можно ли в лиспе, в качестве координат задать выражение? B2Slow LISP 6 11.07.2005 11:40