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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Помогите получить координаты линии и текста мультивыноски(ПСК, z/=0)

LISP. Помогите получить координаты линии и текста мультивыноски(ПСК, z/=0)

Ответ
Поиск в этой теме
Непрочитано 11.05.2016, 11:13 #1
LISP. Помогите получить координаты линии и текста мультивыноски(ПСК, z/=0)
alexgeops
 
Регистрация: 03.12.2015
Сообщений: 13

Суть проблемы. Проставляли на работе по 3д полилиниям мультивыноски с привязкой. Теперь внезапно выяснилось что мультивыноски должны по Z сидеть на нуле. Опытным путем и гуглом выяснил что координаты линий и текста хранятся в dxf кодах 10, 12, 110. НО. В этих чуднЫх мультивыносках к этим данным прикручены еще одни, то ли вектор поворота по осям, то ли вектор выдавливания, то ли еще что-то. для dxf 10 - 11, для 12 - 13, для 110 - 111 и 112, т.е. если просто прочитать координаты с этими кодами, они не соответствуют ожидаемым на экране.

результат entget:
((-1 . <Имя объекта: 7fffc835a80>) (0 . "MULTILEADER") (5 . "2560") (102 . "{ACAD_XDICTIONARY") (360 . <Имя объекта: 7fffc835a90>) (102 . "}") (330 . <Имя объекта: 7ffff93e9f0>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "ИИ_ВЫНОСКИ") (100 . "AcDbMLeader") (270 . 2) (300 . "CONTEXT_DATA{") (40 . 1.0) (10 212950.0 187938.0 460.365) (41 . 2.0) (140 . 3.0) (145 . 1.0) (174 . 6) (175 . 6) (176 . 0) (177 . 0) (290 . 1) (304 . "152.70люк\\P151.20тр.\\P151.00дно") (11 0.0 0.0 1.0) (340 . <Имя объекта: 7fffc813c30>) (12 212951.0 187941.0 460.365) (13 0.982075 0.18849 0.0) (42 . 0.189624) (43 . 0.0) (44 . 0.0) (45 . 1.0) (170 . 1) (90 . -1073741824) (171 . 1) (172 . 5) (91 . -1073741824) (141 . 1.0) (92 . 0) (291 . 1) (292 . 1) (173 . 0) (293 . 0) (142 . 0.0) (143 . 0.0) (294 . 0) (295 . 0) (296 . 0) (110 212915.0 187889.0 460.365) (111 0.982075 0.18849 0.0) (112 -0.18849 0.982075 0.0) (297 . 0) (302 . "LEADER{") (290 . 1) (291 . 1) (10 212950.0 187938.0 460.365) (11 0.982075 0.18849 0.0) (90 . 0) (40 . 0.0) (304 . "LEADER_LINE{") (10 212956.0 187918.0 460.365) (91 . 0) (170 . 1) (92 . -1056964608) (340 . <Имя объекта: 0>) (171 . -2) (40 . 0.0) (341 . <Имя объекта: 0>) (93 . 0) (305 . "}") (271 . 0) (303 . "}") (272 . 9) (273 . 9) (301 . "}") (340 . <Имя объекта: 7fffc84ba70>) (90 . 279744) (170 . 1) (91 . -1073741824) (341 . <Имя объекта: 7ffff93e940>) (171 . -2) (290 . 1) (291 . 1) (41 . 0.0) (342 . <Имя объекта: 7fffc84ba30>) (42 . 3.0) (172 . 2) (343 . <Имя объекта: 7fffc813c30>) (173 . 6) (95 . 6) (174 . 1) (175 . 0) (92 . -1073741824) (292 . 0) (93 . -1056964608) (10 1.0 1.0 1.0) (43 . 0.0) (176 . 0) (293 . 1) (294 . 0) (178 . 0) (179 . 1) (45 . 1.0) (271 . 0) (272 . 9) (273 . 9) (295 . 1))

В мультивыносках, которые я начертил в МСК: (111 1.0 0.0 0.0) (112 0.0 1.0 0.0), (11 1.0 0.0 0.0)

По всей видимости эти выноски рисовали еще и в ПСК. Функция trans ожидаемого успеха не принесла. Прошу помощи. Заранее благодарен.
Просмотров: 3500
 
Непрочитано 11.05.2016, 11:29
#2
Кулик Алексей aka kpblc
Moderator

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


Вопрос номер раз: а чем flatten и его аналоги (на форуме, кстати, есть) не устраивают?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.05.2016, 11:36
#3
alexgeops


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Вопрос номер раз: а чем flatten и его аналоги (на форуме, кстати, есть) не устраивают?
хочется понять как преобразуются координаты, мало ли какие задачи в будущем возникнут.
alexgeops вне форума  
 
Непрочитано 11.05.2016, 11:40
#4
Кулик Алексей aka kpblc
Moderator

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


Я почти не работал с мультивыносками, но попробуй через vla-представление с ними поиграться.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.05.2016, 11:40
#5
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


В таких вещах, как мультивыноски, лучше и не пытаться разобраться, к сожалению у автодеска все последние разработки - себе дороже с ними ковыряться.
Sleekka вне форума  
 
Автор темы   Непрочитано 11.05.2016, 11:47
#6
alexgeops


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


Цитата:
Сообщение от Sleekka Посмотреть сообщение
себе дороже с ними ковыряться.
согласен. на днях ковырялся с вьюпортами, хотелось застрелиться.

----- добавлено через ~15 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я почти не работал с мультивыносками, но попробуй через vla-представление с ними поиграться.
попробовал (vlax-invoke-method(vlax-ename->vla-object obj) 'GetLeaderLineVertices 0), полученные координаты получились с тем же небольшим отскоком в сторону как и через dxf 10, что за индекс он ждет, не понял, подставил наугад ноль. до текста пока не добрался...
Оххх.. чувствую, от меня еще до кучи в ближайшее время будут ждать автоматический разнос накладывающихся выносок... потому и хочу разобраться с координатами.

----- добавлено через ~29 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Вопрос номер раз: а чем flatten и его аналоги (на форуме, кстати, есть) не устраивают?
flatten мультивыноски тупо расчленил
alexgeops вне форума  
 
Непрочитано 11.05.2016, 12:24
#7
Кулик Алексей aka kpblc
Moderator

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


А что, файл с такой мультивыноской является военной, государственной и коммерческой тайной одновременно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.05.2016, 13:23
#8
alexgeops


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А что, файл с такой мультивыноской является военной, государственной и коммерческой тайной одновременно?
да, коммерческой. у нас с этим жестко. да вопрос-то был собственно не в ковырянии мультивыноски, а в преобразовании (assoc 110 ...) через (assoc 111 ...), не сталкивался ли кто-нибудь.

пока что решил через
(vlax-invoke obj 'Move (list 0.0 0.0 z) '(0.0 0.0 0.0))

вот что накопал
110 MLeader Plane Origin Point
111 MLeader Plane X-Axis Direction
112 MLeader Plane Y-Axis Direction
только как применить пока не понял
alexgeops вне форума  
 
Непрочитано 11.05.2016, 14:13
#9
Кулик Алексей aka kpblc
Moderator

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


Ты не DXF-представление случайно смотришь?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.05.2016, 15:09
#10
alexgeops


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ты не DXF-представление случайно смотришь?
не понял вопрос. ковыряю то что вернулось entget-ом. инфу по кодам 110-112 взял здесь: http://help.autodesk.com/view/ACD/20...1-9692393B0C22
alexgeops вне форума  
 
Непрочитано 11.05.2016, 15:26
#11
Кулик Алексей aka kpblc
Moderator

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


Нда, плохо разрываться между работой и форумом
Попробуй векторное произведение групп 111 и 112 - теоретически ты получишь направление нормали плоскости, в которой была отрисована выноска. Хотя я сейчас начинаю думать, что надо будет просто получать группы 10 и обрубать у них координату Z. По полученным точкам создавать новую мультивыноску, с копированием (или новым созданием) аннотации, а старый исходник удалять.
P.S. С подобной задачей ни разу не сталкивался, поэтому рецепт из разряда "пальцем в небо"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.05.2016, 17:17
#12
alexgeops


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
векторное произведение групп 111 и 112
спасибо, попробую позже, переключился на другую задачу.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
получать группы 10 и обрубать у них координату Z
не получается, координаты полученной точки отскакивают в сторону от ожидаемого на экране.

подозреваю что когда строили мультивыноски, крутили ПСК по полилинии
alexgeops вне форума  
 
Непрочитано 11.05.2016, 23:25
#13
VVA

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


Цитата:
Сообщение от alexgeops Посмотреть сообщение
внезапно выяснилось что мультивыноски должны по Z сидеть на нуле.
еще варианты плющилок посмотри здесь LISP. Обнуление координаты Z (аналог FLATTEN ) (пост #1 и #2) Может что-то подойдет.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.05.2016, 11:43
#14
P_S


 
Регистрация: 09.10.2006
Санкт-Петербург
Сообщений: 99


Ну и помойка же этот ваш Multileader – в одну кучу собраны DXF-коды и для multileader, и для multileaderstyle, а там и сегменты лидера, и стиль стрелки, и стиль текста, и «собачья нога» - полка (Dogleg); и для каждого объекта – его положение, разворот, и т.д, и т.п. В ActiveX сборная солянка не лучше. Ясно, что делалось это для удобства работы в пользовательском интерфейсе – чтоб всё в одном флаконе, а отнюдь не для удобства стороннего разработчика. Разбираться в этом очень уж заморочно. Понятно, почему flatten грубо разбивает объект – нужна неслабая программулина, чтобы отследить все взаимоотношения между объектами при изменении одного параметра (не знаю, задавался ли кто-нибудь такой целью).
Что понятно: точка вставки самого multileader – это DXF-код 10 в определении leader line:
Код:
[Выделить все]
 (assoc 10(member'(304 . "LEADER_LINE{")(entget(car(entsel)))))
Но при этом отличные от нулей и единиц значения кодов 111; 112; 11; 13 в примере alexgeops – а это не что иное, как углы поворота компонентов multileader (вектора), говорят о том, что после создания мультивыноску крутили для читаемости чертежа, возможно, без объектной привязки, возможно, не только крутили, но и таскали. Тут уж никакой trans не поможет.
В общем, не знаю, надо ли в этом копаться.
P_S вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Помогите получить координаты линии и текста мультивыноски(ПСК, z/=0)

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового типа линий Apelsinov AutoCAD 915 08.07.2022 12:36
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Lisp. Получить координаты точек 3D тела. Golem-iq LISP 9 06.09.2013 13:38
Как получить координаты вершин линии в полярной системе координат? krusty AutoCAD 6 05.07.2011 10:16
Lisp, помогите с алгоритмом "подтягивания" поллиний 2123 LISP 1 03.02.2010 23:58