Странный блок. В "BLOCKS Section" выдаются одинаковые координаты центров разных окружностей!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Странный блок. В "BLOCKS Section" выдаются одинаковые координаты центров разных окружностей!

Странный блок. В "BLOCKS Section" выдаются одинаковые координаты центров разных окружностей!

Ответ
Поиск в этой теме
Непрочитано 06.11.2010, 02:33 #1
Странный блок. В "BLOCKS Section" выдаются одинаковые координаты центров разных окружностей!
KAI
 
геологоразведка, строительство
 
Магадан
Регистрация: 14.10.2003
Сообщений: 311

Проверяем все объекты блока в "BLOCKS Section" и удивляемся, что обе окружности имеют одну и ту же координату центра:

<Entity name: 7ed1a530>
((-1 . <Entity name: 7ed1a530>) (0 . "CIRCLE") (330 . <Entity name: 7ed1a508>)
(5 . "30CE") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbCircle") (10
1.0 -0.27 0.0) (40 . 0.15) (210 0.0 0.0 1.0))
cen_pt = (1.0 -0.27 0.0)

<Entity name: 7ed1a538>
((-1 . <Entity name: 7ed1a538>) (0 . "CIRCLE") (330 . <Entity name: 7ed1a508>)
(5 . "30CF") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbCircle") (10
1.0 -0.27 0.0) (40 . 0.15) (210 0.0 0.0 -1.0))
cen_pt = (1.0 -0.27 0.0)

Я, конечно подозреваю, что этот блок был сделан в каком то приложении к Acad (5 и 330 коды одинаковы). Но как с этим бороться?

Вложения
Тип файла: dwg
DWG 2004
Странный блок.dwg (40.2 Кб, 257 просмотров)

__________________
Лень - великий двигатель прогресса!
Просмотров: 3078
 
Непрочитано 06.11.2010, 03:03
#2
Кулик Алексей aka kpblc
Moderator

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


Разница в 210 группе.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.11.2010, 09:10
#3
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


Может я и не прав, но если для кода 210 не равного (0 0 1) я применяю для координаты точки (или точек) функцию trans в UCS World, то вроде все получается нормально.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Непрочитано 06.11.2010, 14:09
#4
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(vl-load-com)

(defun test (ent / lst)
          ; ent -> block reference pointer (ename / vla)
  (if (= (type ent) 'ename)
    (setq ent (vlax-ename->vla-object ent))
    ) ;_ end of if
  (setq lst (mapcar
              (function
                (lambda (x)
                  (setq x (entget (vlax-vla-object->ename x)))
                  (trans (cdr (assoc 10 x)) (cdr (assoc 210 x)) 0)
                  ) ;_ end of lambda
                ) ;_ end of function
              (vl-remove-if-not
                (function
                  (lambda (x)
                    (= (vla-get-objectname x) "AcDbCircle")
                    ) ;_ end of lambda
                  ) ;_ end of function
                ((lambda (/ res)
                   (vlax-for item (vla-item
                                    (vla-get-blocks
                                      (vla-get-activedocument
                                        (vlax-get-acad-object)
                                        ) ;_ end of vla-get-activedocument
                                      ) ;_ end of vla-get-blocks
                                    (vla-get-name ent)
                                    ) ;_ end of vla-item
                     (setq res (cons item res))
                     ) ;_ end of vlax-for
                   (reverse res)
                   ) ;_ end of lambda
                 )
                ) ;_ end of vl-remove-if-not
              ) ;_ end of mapcar
        ) ;_ end of setq
  ) ;_ end of defun
Вернет:
Код:
[Выделить все]
'((1.0 -0.27 0.0) (-1.0 -0.27 0.0))
P.S. Код написан весьма коряво, можно сильно его укоротить.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.11.2010, 23:53
#5
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Да-а.... забавно, хорошо я через vla-функций обычно ковыряюсь, тама такого прикола нет!
Евгений А. вне форума  
 
Непрочитано 07.11.2010, 01:11
#6
Кулик Алексей aka kpblc
Moderator

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


В vla-варианте приколы другие )))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.11.2010, 01:12
#7
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


>>Кулик Алексей aka kpblc
Ага!
Примерно то же я и сделал.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Непрочитано 07.11.2010, 01:17
#8
Кулик Алексей aka kpblc
Moderator

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


Основной прикол в строке
Код:
[Выделить все]
(trans (cdr (assoc 10 x)) (cdr (assoc 210 x)) 0)
У тебя как выполняется trans?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.11.2010, 01:27
#9
Li6-D


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


Прикол забавный, но вполне законный .
Разобьем блок и переместим осколки как, чтобы точка перелома V попала в 0,0,0. Группа 10 этих окружностей будет совпадать, а расстояние между ними будет равно 2.
Вывод: если хотите МСК, не забывайте про группу 210 и trans.

Последний раз редактировалось Li6-D, 07.11.2010 в 01:38.
Li6-D вне форума  
 
Автор темы   Непрочитано 08.11.2010, 01:33
#10
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
У тебя как выполняется trans?
Код у меня чуть другой, но суть, думаю от этого не меняется. Визуально все обрабатывается как надо!

Вот только интересно, в каком же приложении такие блоки создаются? Я имею в виду с разными кодами 210.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Непрочитано 08.11.2010, 01:45
#11
Кулик Алексей aka kpblc
Moderator

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


KAI, ведь есть как минимум 2 программных способа создания блока - через entmake и через vla. Оба варианта допускают создание внутри блока примитивов с немировой системой координат. Так что вопрос ИМХО к авторам ПО...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.11.2010, 21:33
#12
Li6-D


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


Цитата:
Вот только интересно, в каком же приложении такие блоки создаются?
Ничего сложного - создаем примитивы из прототипа:
(entmake (subst '(210 0 0 -1) '(210 0 0 1) (entget (car (entsel))))).
и объединяем их в блок...
Для разных примитивов тупая замена группы 210 приводит к различным результатам:
- линии, эллипсы, точки остаются на месте, накрывая исходный примитив;
- полилинии, круги, кольца, текст, блоки улетают и становятся симметричными относительно оси 0Y. Координаты сохраняются.
Мтекст ведет себя совсем по другому. После разбивки блока, содержащего круги и линии, первые не меняют координат, а вторые меняют. В общем, непаханное поле для исследования
Li6-D вне форума  
 
Непрочитано 08.11.2010, 21:41
#13
Кулик Алексей aka kpblc
Moderator

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


Li6-D, системы координат DXF-представления вершин (насколько я помню)
LINE -> WCS
POINT -> WCS
CIRCLE -> OCS
TEXT -> OCS
MTEXT -> OCS
LWPOLYLINE -> OCS
3DPOLYLINE -> WCS
SPLINE -> WCS
BlockReference -> OCS
AttributeReference -> OCS
Дополнительно: http://autolisp.ru/2009/10/01/vla-function-features/ и http://autolisp.ru/2009/10/09/vla-function-features2/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Странный блок. В "BLOCKS Section" выдаются одинаковые координаты центров разных окружностей!