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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Аutocad 2011 "извлечение данных" из полилинии

Аutocad 2011 "извлечение данных" из полилинии

Ответ
Поиск в этой теме
Непрочитано 16.06.2011, 11:48 #1
Аutocad 2011 "извлечение данных" из полилинии
avax
 
Регистрация: 14.06.2011
Сообщений: 2

Здравствуйте.
Пытаюсь извлечь данные из полилинии мне нужны координаты вершин X, Y, в мастере извлечения данных в "фильтре категорий" в свойстве "геометрия" этих данных для полилинии нет. Как можно решить мою задачу?
Просмотров: 38752
 
Непрочитано 16.06.2011, 11:56
1 | #2
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,336


команда _list
Хмурый вне форума  
 
Автор темы   Непрочитано 16.06.2011, 12:21
#3
avax


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


Спасибо.
А нет возможности получить координаты в виде таблицы excel, или другой какой либо таблицы которую можно в excel вставить. Просто когда у полилинии три десятка вершин очень долго копировать поштучно 60 координат в excel таблицу.
avax вне форума  
 
Непрочитано 16.06.2011, 12:36
#4
Andi55

инженер-электрик
 
Регистрация: 12.08.2005
Иркутск
Сообщений: 523
<phrase 1=


Я поражен! Первым же вопросом новичок приятно порадовал глубиной проникновения в Акад.
Действительно, у полилинии при извлечении данных нет координат ее вершин... Что, впрочем и понятно, 1 полилиния = 1 примитив, хотя и составной.
Тут смотря какая цель стоит, так и надо действовать. Для одной полилинии и одноразовой работы - List, как уже сказали. Для автоматизации надо доработать.
1. Расставить блоки или точки в каждой вершине полилинии (кажется, есть такой лисп)
2. Извлекать инфо для расставленных блоков.
Как-то так...
__________________
В MEP моя буква - Е

Последний раз редактировалось Andi55, 16.06.2011 в 12:42.
Andi55 вне форума  
 
Непрочитано 16.06.2011, 13:23
#5
n0str0m0

геолог
 
Регистрация: 02.09.2009
Тында, Дальний Восток
Сообщений: 404
<phrase 1=


В AutoCAD Civil 3d есть функция расстановки точек по узлам полилинии, с последующим выводом их в табличную форму, можно и в Эксель
n0str0m0 вне форума  
 
Непрочитано 20.06.2011, 19:22
#6
Tyhig

Оснащение проходки горных выработок, ПОС, нормоконтроль, КР, АР
 
Блог
 
Регистрация: 30.01.2008
Ленинград
Сообщений: 18,687


Не сочтите некрофилом, но помогите разобраться поподробнее, пожалуйста...
Точки я научился ставить по полилинии, а как таблицу с координатами получить ?

И у меня почему то дикие координаты...
Сделал новую пользовательскую систему (верх Х вправо y) в точке с координатой 0;0.
Но всё равно в "Редактор точек " координаты видимо пишутся из системы мировой МСК.

Пишутся :
Восточное положение
Северное положение

А
Восточное положение в координатах сетки
и Северное положение в координатах сетки
не пишутся
__________________
"Безвыходных ситуаций не бывает" барон Мюнхаузен
Tyhig вне форума  
 
Непрочитано 21.06.2011, 02:45
2 | #7
VVA

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


Цитата:
Сообщение от avax Посмотреть сообщение
А нет возможности получить координаты в виде таблицы excel, или другой какой либо таблицы которую можно в excel вставить
CoorN
Point Manager
Geo_Export
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 31.07.2011, 17:45
#8
baleew

архитектура
 
Регистрация: 31.07.2011
Москва
Сообщений: 12


Уважаемый, VVA, давно и с большим удовольствием пользуюсь Вашим скриптами из серии Coord (CoorN и ECoor), спасибо за Ваш труд! Но тут вдруг задача возникла нетипичная и кроме как с этим Лиспом решить не получается, что собственно и причина моего обращения. Если Вам не особо сложно, подскажите пожалуйста, в каком месте кода надо подправить, чтоб для COORT и COORNP можно было возвратить в результате нечто похожее на это:
Код:
[Выделить все]
 ;(setq ptLst (mapcar '(lambda(x)(mapcar 'rtos x)) ptlst)) ;возвратить результат в ед. чертежа 1:1
(setq ptLst (mapcar '(lambda(x)(mapcar 'rtos (mapcar '(lambda(y)(* y 0.001)) x))) ptlst)) ;возвратить результат 1:1000
по аналогии с тем, как я поступал по Вашему совету с кодом COORN в таких случаях, но теперь я использую Ecoor и сам конечно же не могу разобраться с Lisp.
обычно это сильно не беспокоило, но сейчас такая задача, что надо работать со своими чертежами, а они обычно 1:1, но в файл надо выводить в метрах.

И ещё, если не трудно посмотрите пожалуйста, что можно сделать, чтоб последняя точка на замкнутом POLYLINE не отрисовывалась в чертеж, но в списке присутствовала и в файл выводилась как первая точка?
Спасибо!

Последний раз редактировалось baleew, 31.07.2011 в 19:14. Причина: зы
baleew вне форума  
 
Непрочитано 01.08.2011, 12:21
1 | #9
VVA

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


baleew, Там все очень просто.
Берем за основу ECoor. Там все сделано функциями.
Для COORN
Было
Код:
[Выделить все]
(defun c:COORN ( / ptLst)
  (vl-load-com)
  (if (setq ptLst (vva-get-final-points-list)) ;_В ptlst список полученных точек
    (vva-export-point ptLst t nil) ;_Экспорт списка ptlst
    )
  (princ)
  )
Стало

Код:
[Выделить все]
(defun c:COORN ( / ptLst)
  (vl-load-com)
  (if (setq ptLst (vva-get-final-points-list)) ;_В ptlst список полученных точек
   (progn
    (setq ptLst(mapcar '(lambda(x)(mapcar '* x (list 0.001 0.001 0.001)))ptlst)) ;_Возвратить результат М 1:1000 
    (vva-export-point ptLst t nil) ;_Экспорт списка ptlst
   );_end of progn
    )
  (princ)
  )
Для COORT найди строчки
Код:
[Выделить все]
    (setq txtList (reverse txtList))
    (princ "\n+++++++ Coordinates list +++++++\n")
И добавь после txtlist
Код:
[Выделить все]
    (setq txtList (reverse txtList))
   (setq ptLst(mapcar '(lambda(x)(mapcar '* x (list 0.001 0.001 0.001)))ptlst)) ;_Возвратить результат М 1:1000 
    (princ "\n+++++++ Coordinates list +++++++\n")
По поводу последней просьбы: внес изменения в Ecoor.lsp Пока выкладываю здесь. Потестируй и обязательно отпишись. Тогда обновлю по ссылке
Вложения
Тип файла: lsp ECoor.LSP (26.1 Кб, 549 просмотров)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 02.08.2011 в 20:38.
VVA вне форума  
 
Непрочитано 01.08.2011, 15:13
#10
baleew

архитектура
 
Регистрация: 31.07.2011
Москва
Сообщений: 12


Спасибо, VVA, с масштабом вроде всё понятно, хотя в случае с COORNP рекомендованный способ не вполне срабатывает, т.е. задача с выводом списка в файл решается, но отрисовки нет. В общем я немного поправил код в самой функции vva-export-point, в месте где было:
Код:
[Выделить все]
  
(setq ptLst (mapcar '(lambda (x) (mapcar 'rtos x)) ptlst))
стало:
Код:
[Выделить все]
 (setq scale 0.001) ;_потом доделаю с вводом переменной 
(setq ptLst (mapcar '(lambda(x)(mapcar 'rtos (mapcar '(lambda(xx)(* xx scale)) x))) ptlst)) ;_возвратить результат M 1:scale
так пока всё работает, с этим вопросом решено, спасибо!

С новым вариантом ECoor.LSP проблема! Скрипт завершается (похоже аварийно) после ввода step. Т.е., что вводится -- значения не имеет, просто ломается на этой процедуре.
baleew вне форума  
 
Непрочитано 01.08.2011, 23:44
#11
black_mts

Строительство
 
Регистрация: 24.09.2010
Сочи
Сообщений: 215


Цитата:
Сообщение от Tyhig Посмотреть сообщение
как таблицу с координатами получить ?
Экспорт точек или групп точек в любом удобном Вам формате файла и порядком данных.
black_mts вне форума  
 
Непрочитано 02.08.2011, 08:53
1 | #12
VVA

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


baleew, Обновил #9. Забыл добавить библиотечную функцию. Тестируй
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.08.2011, 11:39
#13
baleew

архитектура
 
Регистрация: 31.07.2011
Москва
Сообщений: 12


VVA, теперь работает, _.-TEXT вводит так как и хотелось -- на 1 раз меньше чем в списке, вернее чем должно быть в списке. С отрисовкой в чертёж всё в порядке.
Но теперь в списке на 1 элемент больше чем надо:
Код:
[Выделить все]
+++++++ Coordinates list +++++++

41759.704,20823.350,0.000
67609.351,45879.144,0.000
66230.217,57772.704,0.000
75151.045,57713.885,0.000
75375.554,45050.840,0.000
91383.441,28535.769,0.000
61943.562,0.000,0.000
41759.704,20823.350,0.000
41759.704,20823.350,0.000

+++++++++ End of list +++++++++
и возникла ещё очень неприятная штука с выводом в файл, а именно -- на LUPREC вообще не обращает внимания, выводит после дес.точки всё подряд:
Код:
[Выделить все]
1;41759.70447416601;20823.35011575372;0.000000000000
2;67609.35080235823;45879.14403409230;0.000000000000
3;66230.21693950517;57772.70379885008;0.000000000000
4;75151.04496178588;57713.88493783308;0.000000000000
5;75375.55402835457;45050.84007264581;0.000000000000
6;91383.44074345006;28535.76929118578;0.000000000000
7;61943.56163667888;0.000000000007;0.000000000000
1;41759.70447416601;20823.35011575372;0.000000000000
1;41759.70447416601;20823.35011575372;0.000000000000
это важно!

ps. ну с этим я тоже вроде разобрался, там в строчках: (rtos (cadr ln) 2 12) -- это можно отрегулировать и по аналогии с первым вариантом ECoor.LSP, если без двух последних аргументов, то используются текущие значения LUNITS и LUPREC. Если так, то этот вопрос тоже снят.

Последний раз редактировалось baleew, 02.08.2011 в 12:29. Причина: ps
baleew вне форума  
 
Непрочитано 02.08.2011, 12:33
#14
VVA

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


baleew, Обновил #9 Пробуй. Я считал, что нужно выводить в отчет все точки полилиний. Получается, что нужно выводить в отчет все различные точки?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.08.2011, 13:18
#15
baleew

архитектура
 
Регистрация: 31.07.2011
Москва
Сообщений: 12


VVA, да в отчёт надо выводить все точки полилиний, но в случае если полилиния замкнута (т.е. координаты первой и последней точек совпадают), в отчете последняя точка тоже присутствует, но не как №4 (в случае с треугольником), а как №1 и со своими координатами (или координатами №1, что собственно без разницы). Другими словами, в отчете должно всё выглядеть так же как и в самом первом варианте ECoor.lsp, с той только разницей, что в колонке "N" для последней точки должно использоваться имя первой точки, они должны выглядеть как будто бы это одна и та же точка. По сути первый вариант скрипта делает всё правильно, надо только в отчете переименовать последнюю точку на первую. Ну и в чертеже сейчас выглядит всё так как надо.

ps/ для наглядности привожу результат исполнения последнего варианта ECoor.LSP
Код:
[Выделить все]
1;41759.704;20823.350;0.000
2;67609.351;45879.144;0.000
3;66230.217;57772.704;0.000
4;75151.045;57713.885;0.000
5;75375.554;45050.840;0.000
6;91383.441;28535.769;0.000
7;61943.562;0.000;0.000
но ожидается такое:
Код:
[Выделить все]
1;41759.704;20823.350;0.000
2;67609.351;45879.144;0.000
3;66230.217;57772.704;0.000
4;75151.045;57713.885;0.000
5;75375.554;45050.840;0.000
6;91383.441;28535.769;0.000
7;61943.562;0.000;0.000
1;41759.704;20823.350;0.000

Последний раз редактировалось baleew, 02.08.2011 в 13:30.
baleew вне форума  
 
Непрочитано 02.08.2011, 13:56
1 | #16
VVA

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


Обновил еще раз #9. Надеюсь последний
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.08.2011, 16:25
#17
baleew

архитектура
 
Регистрация: 31.07.2011
Москва
Сообщений: 12


VVA, да, спасибо большое, всё работает! А со своими чертежами, так вообще -- красота, скрипт теперь можно считать совсем близким к идеальному.
Но, Владимир, я наверное сразу невнятно обрисовал задачу. Мне хотелось

Моя проблема состояла в том, что сейчас вот пришлось разбираться с чужим планом, который во-первых был нарисован в 1000 раз мельче моих и во-вторых "грязный". Все многоугольники нарисованы так, что количество сегментов полилинии равно количеству сторон (если честно, я сам не сразу увидел), т.е. не как обычная замкнутая поллиния, а такая которая если даже не замкнута выглядит в чертеже как многоугольник (замкнутая полилиния). И если даже точки у неё "дотянуты", но их всё равно на одну больше, чем должно быть, а координаты двух последних совпадают с первой. К примеру для прямоугольного треугольника, где a,b =10, в свойствах полилинии получается такое:
Код:
[Выделить все]
0.000,0.000,0.000
0.000,10.000,0.000
10.000,0.000,0.000
0.000,0.000,0.000
но в своих планах я обычно рисую не так (как это делают разные прилады у кадастровых инженеров, в пред. варианте), а просто, как делает ACAD
Код:
[Выделить все]
0.000,0.000,0.000
0.000,10.000,0.000
10.000,0.000,0.000
в этом случае и старый скрипт делал всё правильно в отчете, за исключением нумерации последней вершины.

Потому я и попросил тебя, чтоб ты научил скрипт приводить такие (кадастровые) варианты к виду:
Код:
[Выделить все]
1;0.000;0.000;0.000
2;0.000;10.000;0.000
3;10.000;0.000;0.000
1;0.000;0.000;0.000
Чистить все чужие полилинии или наоборот -- перерисовывать свои, сам понимаешь, весьма муторное занятие, поэтому огромное тебе спасибо за существенное облечение труда.
А вообще-то я иногда очень жалею, что я не кодер, на базе одного твоего ECoor можно было бы собрать великолепную утилиту, которая бы решила абсолютно все геодезические проблемы.
Спасибо, Владимир.
baleew вне форума  
 
Непрочитано 02.08.2011, 18:07
#18
VVA

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


Обновил #9 Раньше обрабатывались варианты:
- начало/конец совпадают, полилиния незамкнутая
- начало/конец не совпадают, полилиния замкнутая
В варианте начало/конец совпадают, полилиния замкнутая появлялась лишняя точка. В принципе такое так же может быть в середине полилинии, если пару раз подряд ткнули в одну точку. Добавил функцию удаления из списка одинаковых (до 1e-6) подряд идущих точек. Тестируй
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.08.2011, 19:30
#19
baleew

архитектура
 
Регистрация: 31.07.2011
Москва
Сообщений: 12


VVA, да, это кажется именно то, что надо, только желательно такую же процедуру наверное и к ptLst применить тоже, ибо сейчас из отчёта номер точки удаляется, а X,Y,Z остаются.
в варианте -- начало/конец почти совпадают, полилиния замкнутая:
Код:
[Выделить все]
1;0.000;0.000;0.000
2;0.000;10.000;0.000
3;10.000;0.000;0.000
;0.000;0.001;0.000
1;0.000;0.000;0.000
в варианте -- начало/конец почти совпадают, полилиния незамкнутая:
Код:
[Выделить все]
1;0.000;0.000;0.000
2;0.000;10.000;0.000
3;10.000;0.000;0.000
;0.000;0.001;0.000
но отрисовка в чертеж в обоих случаях срабатывает великолепно!
ps/ оба варианта с "грязным" многоугольником, в случае с нормальным построением к скрипту претензий никаких. Понимаю, что в идеале надо было бы "почистить" весь план, удалить из всех полилиний последние (и очень близко лежащие) вершины и замкнуть полилинии, но если бы их было поменьше о скрипте и мысль бы не возникла. В общем я не знаю уже, что тут проще, может быть даже нет смысла различать их по свойству замкнуто/незамкнуто, а просто в обоих случаях удалять из списка последнюю точку (с координатами очень близкими к началу) и вместо неё записывать первую. То есть список для отчета формировать так же как и список для отрисовки точек.
Т.е. если последняя точка очень близка к первой (с допуском определенной точности, от 1e-2 и менее) то в результате она просто не появляется в списках и в отчете полилиния описывется так:
Код:
[Выделить все]
1;0.000;0.000;0.000
2;0.000;10.000;0.000
3;10.000;0.000;0.000
1;0.000;0.000;0.000

Последний раз редактировалось baleew, 02.08.2011 в 20:17. Причина: зы
baleew вне форума  
 
Непрочитано 02.08.2011, 20:38
#20
VVA

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


Эта проблема решается задание точности. Раньше я точки сравнивал с точность до 1e-6. Теперь (в #9 новый вариант) я сделал этот параметр настраиваемым. Пока что в лиспе через переменную *FUZZ*
Код:
[Выделить все]
(or (numberp *FUZZ*)(setq *FUZZ* 0.000001))
Задай ей значение 0.01
Цитата:
Команда: (setq lst '((20.0 0.0 0.0)(20.0 10.0 0.0)(30.0 0.0 0.0)(20.0 0.001 0.0)(20.0 0.0 0.0)))
((20.0 0.0 0.0) (20.0 10.0 0.0) (30.0 0.0 0.0) (20.0 0.001 0.0) (20.0 0.0 0.0))
Команда:
Команда: (reverse (vva-lst-remove-dup (reverse lst) 1e-3))
((20.0 0.0 0.0) (20.0 10.0 0.0) (30.0 0.0 0.0) (20.0 0.001 0.0) (20.0 0.0 0.0))
Команда:
Команда: (reverse (vva-lst-remove-dup (reverse lst) 1e-2))
((20.0 0.0 0.0) (20.0 10.0 0.0) (30.0 0.0 0.0) (20.0 0.0 0.0))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Аutocad 2011 "извлечение данных" из полилинии

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где можно применить "Извлечение данных"(_.dataextraction)? wetr AutoCAD 120 07.05.2020 13:39
AutoCAD 2011 не находит acdb17.dll ALFMario AutoCAD 16 20.02.2014 12:14
Вопросы по рендерингу. 2008, 2011 автокад DENLaDEN AutoCAD 27 22.01.2013 01:53
Удаление/Установка АutoCad 2011 Sierone AutoCAD 3 26.05.2011 16:25
AutoCAD 2011 и ошибка при изменении Z координаты 3D полилинии, через палитру свойств gomer8 AutoCAD 9 16.12.2010 13:12