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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > REGION свойства

REGION свойства

Ответ
Поиск в этой теме
Непрочитано 19.12.2003, 11:36 #1
REGION свойства
Apelsinov
 
Проектировщик ВК. LISP-любитель.
 
Москва
Регистрация: 15.12.2003
Сообщений: 1,186

Есть два региона, нужно их програмно сравнить на предмет геометрической идентичности, то есть на совпадение контуров. Как это сделать в Lisp?
Просмотров: 5392
 
Непрочитано 19.12.2003, 11:44
#2
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Сравнить площади и периметры.
Torino вне форума  
 
Автор темы   Непрочитано 19.12.2003, 11:57
#3
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,186
<phrase 1=


Цитата:
Сообщение от Torino
Сравнить площади и периметры.
Нет, так не пойдет, геометрическая идентичность должна быть полная, а не только по площади и периметру, ну например два зеркальных обьекта, площадь/периметр одинаковые, но вершины то разные!
Apelsinov вне форума  
 
Непрочитано 19.12.2003, 12:48
#4
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Пока приходит на ум только очень "тяжелый" алгоритм. Вытянуть из DXF кодов все вершины> Создать списки расстояний "от каждой- до каждой"> списки отсортировать по убыванию и сравнить. Подобный, конечно более оптимизированный алгоритм, работает всистемах идентификации по отпечатку пальца. Там обрабатываеться соответствие примерно 50 точек.
{Smirnoff} вне форума  
 
Непрочитано 19.12.2003, 13:22
#5
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Да, в случае с MIRROR списки будут одинаковыми. Не катит. Можно конечно найти габариты регионов, свместить их 2 раза с разворотом на 180 градусов и проверить совпадение нескольких контрольных точек. Хотя и это не дает полной гарантии. Тяжелый случай.
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 19.12.2003, 15:51
#6
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,186
<phrase 1=


Наверное я задал слишком общий вопрос, поставлю тогда вопрос конкретнее: Как можно получить список координат вершин примитива REGION.
Зная координаты вершин, в случае если ни одна из сторон не является дугой, можно узнать идентичны регионы или нет (наклон, зеркало определяются углами наклона сторон к оси). Но в том то и проблема, что я не могу получить координаты вершин. Для простенького региона выдается такой код:
Код:
[Выделить все]
((-1 . <Entity name: 41febe78>) (0 . "REGION") (330 . <Entity 
name: 41febcf8>) (5 . "4F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . 
"0") (100 . "AcDbModelerGeometry") (70 . 1) (1 . "koo mn n o          ") (1 . 
"h J1410(1 nl ^\\VL kqoqm QK mk Y-6 [:< nf njekfeml mool ") (1 . "rn 
fqfffffffffffffffj:rooh n:rono ") (1 . "=0;& {rn {n {rn {rn |") (1 . "3*2/ {rn 
{rn {m {o |") (1 . ",7:33 {rn {rn {rn {l {rn {n |") (1 . "9><: {rn {rn {k {m 
{rn {j -:):-,:; ;0*=3: 0*+ |") (1 . "300/ {rn {rn {i {l |") (1 . "/3>1:r,*-9><: 
{rn oqj oqniiiiiiiiiiiijhnf o o o rn rn o o 90-(>-;@) V V V V |") (1 . "<0:;8: 
{rn {h {g {rn {f 90-(>-; {k {rn |") (1 . "<0:;8: {rn {g {i {rn {no 90-(>-; {k 
{rn |") (1 . "<0:;8: {rn {i {h {rn {nn 90-(>-; {k {rn |") (1 . ":;8: {rn {nm 
{nl {i {nk 90-(>-; |") (1 . ":;8: {rn {nl {nj {h {ni 90-(>-; |") (1 . ":;8: {rn 
{nj {nm {g {nh 90-(>-; |") (1 . "):-+:' {rn {f {ng |") (1 . "):-+:' {rn {f {nf 
|") (1 . ",+->687+r<*-): {rn o o o n o o V V |") (1 . "):-+:' {rn {no {mo |") 
(1 . ",+->687+r<*-): {rn n o o roqhohnoihgnngijihji oqhohnoihgnngijmhlh o V V 
|") (1 . ",+->687+r<*-): {rn oqj oqkffffffffffffhnjg o roqhohnoihgnngijihji 
roqhohnoihgnngijmhlh o V V |") (1 . "/061+ {rn o o o |") (1 . "/061+ {rn n o o 
|") (1 . "/061+ {rn oqj oqkffffffffffffhnjg o |"))
Apelsinov вне форума  
 
Непрочитано 19.12.2003, 16:10
#7
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Вот сделал REGION а затем BOUNDARY от него. Может это "ключик".
Код:
[Выделить все]
Command: (entget(car(entsel)))

Select object: ((-1 . <Entity name: 4006ce40>) (0 . "REGION") (330 . <Entity 
name: 4006ccf8>) (5 . "48") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . 
"0") (100 . "AcDbModelerGeometry") (70 . 1) (1 . "koo mn n o          ") (1 . 
"h J1410(1 nl ^\\VL kqoqm QK mk Y-6 [:< nf njeohekm mool ") (1 . "rn 
fqfffffffffffffffj:rooh n:rono ") (1 . "=0;& {rn {n {rn {rn |") (1 . "3*2/ {rn 
{rn {m {o |") (1 . ",7:33 {rn {rn {rn {l {rn {n |") (1 . "9><: {rn {rn {k {m 
{rn {j 90-(>-; ;0*=3: 0*+ |") (1 . "300/ {rn {rn {i {l |") (1 . "/3>1:r,*-9><: 
{rn lqjmhlfmggkiijgjkm iqonijokhgillljihk o o o n n o o 90-(>-;@) V V V V |") 
(1 . "<0:;8: {rn {h {g {rn {f -:):-,:; {k {rn |") (1 . "<0:;8: {rn {g {i {rn 
{no -:):-,:; {k {rn |") (1 . "<0:;8: {rn {i {h {rn {nn -:):-,:; {k {rn |") (1 . 
":;8: {rn {nm {nl {i {nk 90-(>-; |") (1 . ":;8: {rn {nj {nm {h {ni 90-(>-; |") 
(1 . ":;8: {rn {nl {nj {g {nh 90-(>-; |") (1 . "):-+:' {rn {f {ng |") (1 . 
"):-+:' {rn {f {nf |") (1 . ",+->687+r<*-): {rn lqojhkimifkmjokfil 
kqgkmnlfnhhnnonhih o rlqihlmojnollinnjgn:rooi oqffffffffffflmjlhl o V V |") (1 
. "):-+:' {rn {nn {mo |") (1 . ",+->687+r<*-): {rn kqlnoinilghkkggomk 
iqnffnomjnnlikhgmk o roqihgkkhlljjogokohn roqhlkikfokoijfjhfnk o V V |") (1 . 
":336/,:r<*-): {rn lqigkolhokgijjhgnm iqnffnoomofgnoljhn o o o rn 
rmqlonjjkkmkgmnhnig:rooi oqimijhfllghflomnnf o n V V |") (1 . "/061+ {rn 
lqojhkimifkmjokfil kqgkmnlfnhhnnonhih o |") (1 . "/061+ {rn lqojhkjhhofgimhi 
iqnffofhfogmjjflmg o |") (1 . "/061+ {rn kqlnoinilghkkggomk iqnffnomjnnlikhgmk 
o |"))

Command: *Cancel*

Command: (entget(car(entsel)))

Select object: ((-1 . <Entity name: 4006ce78>) (0 . "LWPOLYLINE") (330 . 
<Entity name: 4006ccf8>) (5 . "4F") (100 . "AcDbEntity") (67 . 0) (410 . 
"Model") (8 . "0") (100 . "AcDbPolyline") (90 . 3) (70 . 1) (43 . 0.0) (38 . 
0.0) (39 . 0.0) (10 5.70301 4.64498) (40 . 0.0) (41 . 0.0) (42 . 1.0) (10 
4.44985 4.64497) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 4.44986 3.28802) (40 . 
0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 19.12.2003, 16:29
#8
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,186
<phrase 1=


нет, это не ключик, поскольку не с каждого региона можно сделать boundary. Пример - ограничение сплайном.
Apelsinov вне форума  
 
Непрочитано 19.12.2003, 18:09
#9
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Согласен. Честно говоря в первый раз взглянул на DXF коды REGION, и удивился этой абракадабре. Надо подумать, должно быть какое то, простое и остроумное решение.
{Smirnoff} вне форума  
 
Непрочитано 21.12.2003, 16:56 Простите за глупый вопрос...
#10
Grinzaid

Архитектор
 
Регистрация: 14.10.2003
Израиль
Сообщений: 365
<phrase 1=


Простите за глупый вопрос. А почему REGION нельзя разбить, потом объединить в PLINE и с помощью LIST узнать всю его подноготную?
Grinzaid вне форума  
 
Автор темы   Непрочитано 22.12.2003, 10:44 Re: Простите за глупый вопрос...
#11
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,186
<phrase 1=


Цитата:
Сообщение от Grinzaid
Простите за глупый вопрос. А почему REGION нельзя разбить, потом объединить в PLINE и с помощью LIST узнать всю его подноготную?
Потому и нельзя, что не всякий регион может стать полилинией.
Apelsinov вне форума  
 
Непрочитано 22.12.2003, 12:14
#12
Grinzaid

Архитектор
 
Регистрация: 14.10.2003
Израиль
Сообщений: 365
<phrase 1=


Просто я почти никогда не работал со сплайнами и не знал, что они не объединяются в PLINE.
Простите за ещё один глупый вопрос. А почему REGION нельзя разбить, потом НЕ объединять в PLINE, а с помощью LIST и SELECT PREVIOUS узнать подноготную всех его бывших компонентов включая SPLINEs, LINEs и ARCs?
Grinzaid вне форума  
 
Автор темы   Непрочитано 22.12.2003, 15:05
#13
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,186
<phrase 1=


Цитата:
Сообщение от Grinzaid
А почему REGION нельзя разбить, потом НЕ объединять в PLINE, а с помощью LIST и SELECT PREVIOUS узнать подноготную всех его бывших компонентов включая SPLINEs, LINEs и ARCs?
Да, это выход, возможно единственный. Но не очень нравится идея с разбитием региона, просто странно что всю эту информацию не получается выудить из самого региона не разбивая его. Есть подозрение, что регион на самом деле и не является примитивом как таковым, а составным обьектом, и его DXF код содержит информацию обо всех входящих в его состав примитивах, в этом случае, можно было бы сравнивать регионы по входящим в их состав примитивам и некоторым их параметрам, что было бы даже точнее чем по вершинам. Вот только ставит в тупик DXF код.
Apelsinov вне форума  
 
Непрочитано 22.12.2003, 15:10
#14
Grinzaid

Архитектор
 
Регистрация: 14.10.2003
Израиль
Сообщений: 365
<phrase 1=


Поскольку я
Цитата:
Просто я почти никогда не работал
,

то я Grinzaid писал:, а не
Цитата:
Grinzaid писал(а):
.
Grinzaid вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > REGION свойства

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

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