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

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

Проблема с базовой точкой блока и вхождением блока в DXF

Ответ
Поиск в этой теме
Непрочитано 29.08.2013, 11:57 #1
Проблема с базовой точкой блока и вхождением блока в DXF
nogaems
 
Россия
Регистрация: 29.08.2013
Сообщений: 3

Добрый день, форумчане.


Пишется собвственная библиотека для чтения и отображения DXF.
Собственно сабж. Возникла проблема с правильным поворотом блока. У некоторых блоков во вложенном файле
базовая точка находится очень далеко от центра самого блока. Из-за этого вхождение блока ведет себя совсем уже неадекватно. На приложенном рисунке Блок.пнг имеется синий маркер - вхождение блока. А сам блок находится где то на карте слева. Я подозреваю, что это все изза неверной базовой точки блока, потому что при задании базавой точки в редакторе блока на 0,0, все блоки хаотично меняют свое положение, то есть как раз встают у маркеров вхождений блока. При этом при парсинге блока из DXF позиция блока указана как 0,0 или 100,100. То есть нет никаких явных указаний о местонахождении базовой точки.
Я так понимаю, при осуществлении поворота блока, надо принимать во внимание базовую точку самого блока, а не только точку вхождения.
Конкретно вопрос: где мне найти эти самые координаты базовой точки блока, чтобы основываясь на них произвести поворот.

Далее...

Создав тестовый файл для проверки поворота, я увидел в файле некую сущность BLOCKBASEPOINTPARAMETER, которая хранила в себе координаты базовой точки блока, но связать эту сущность с каким то конкретным блоком я не смог.
В прикрепленном же файле dwg, после конвертации, нет никакой сущности типа BLOCKBASEPOINTPARAMETER, однако смещение базовых точек блоков имеет место быть...

Укажите, пожалуйста, как мне быть с этими блоками, пока что я вижу только одно решение: явно указать пользователям что базовая точка блока всегда должна быть на нуле, но это не очень удобно, потому что чертежи поступают из разных источников...

Какой формат все-таки сложный...
Жизнь - боль.

Миниатюры
Нажмите на изображение для увеличения
Название: Блок.png
Просмотров: 80
Размер:	21.9 Кб
ID:	110751  

Вложения
Тип файла: dwg
DWG 2000
map.dwg (6.58 Мб, 1203 просмотров)

Просмотров: 4833
 
Непрочитано 29.08.2013, 13:08
#2
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,457
<phrase 1=


Ниче не понял. Хотябы версию dxf скажите и приложите пример с 1 проблемным блоком состоящим из 1 простого примитива. в модели укажите места где он отображается в автокаде и где в вашей программе.
ЕМНИП базовая точка есть в описании блока. Скорее всего проблема в том, что координаты вставки хранятся не в мировой, а в системе координат объекта
zamtmn вне форума  
 
Автор темы   Непрочитано 29.08.2013, 13:36
#3
nogaems


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
приложите пример с 1 проблемным блоком состоящим из 1 простого примитива

BLOCK
5
121094
330
121091
100
AcDbEntity
8
0
100
AcDbBlockBegin
2
new block 3
70
0
10
0.0
20
0.0
30
0.0
3
new block 3
1

0
LWPOLYLINE
5
121095
330
121091
100
AcDbEntity
8
CX PASSAGEM
62
1
100
AcDbPolyline
90
4
70
1
43
0.0
10
57024.73222292161
20
8068.276259200919
10
57057.99639319717
20
8046.06487571341
10
57035.78500970964
20
8012.800705437797
10
57002.52083943407
20
8035.012088925306
0
LWPOLYLINE
5
121096
330
121091
100
AcDbEntity
8
CX PASSAGEM
62
1
100
AcDbPolyline
90
4
70
1
43
0.0
10
57025.0085425913
20
8066.889370356811
10
57056.60950435307
20
8045.788556043701
10
57035.50869003992
20
8014.187594281905
10
57003.90772827817
20
8035.288408595015
0
LINE
5
121097
330
121091
100
AcDbEntity
8
CX PASSAGEM
62
1
100
AcDbLine
10
57003.9077282782
20
8035.28840859502
30
0.0
11
57056.60950435309
21
8045.788556043701
31
0.0
0
LINE
5
121098
330
121091
100
AcDbEntity
8
CX PASSAGEM
62
1
100
AcDbLine
10
57025.00854259128
20
8066.889370356816
30
0.0
11
57035.50869003992
21
8014.187594281901
31
0.0
0
ENDBLK
5
121099
330
121091
100
AcDbEntity
8
0
100
AcDbBlockEnd


К сожалению, мне сложно вычленить из этого месива один примитив, но так вроде все понятно. Оказывается, при создании блока все примитивы улетели куда то на координаты порядка 50000,8000. Видимо, в этом и есть проблема, базовая точка так и осталась 0,0, просто все примитивы далеко и в итоге я неверно применяю трансформации. Не пойму куда мне девать эти 50000,8000 чтобы получить верное отображение. координаты самой вставки хранятся точно в мировых координатах, например 2000, 1000. А вот координаты примитивов в блоке такие большие...
nogaems вне форума  
 
Непрочитано 29.08.2013, 13:48
#4
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,457
<phrase 1=


>>К сожалению, мне сложно вычленить из этого месива один примитив
Форумчанам это сделать еще сложнее. ИМХО без "минимального" примера понять ниче не получится
Всетаки проблема в том что автокад не воспринимает ваш файл должным образом или ваша программа не приемлит автокадовский файл?
Обратите внимание на
Цитата:
BLOCK
5
121094
330
121091
100
AcDbEntity
8
0
100
AcDbBlockBegin
2
new block 3
70
0
10
0.0
20
0.0
30
0.0
эту группу 10, ей можно подвинуть точку вставки.
zamtmn вне форума  
 
Автор темы   Непрочитано 29.08.2013, 14:52
#5
nogaems


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Всетаки проблема в том что автокад не воспринимает ваш файл должным образом или ваша программа не приемлит автокадовский файл?
Проблема в том, что программа не правильно отображает файл, но это мой косяк. Вот я и хотел бы разобраться насчет последовательности применения трех операций, которые обозначены во "вхождении блока": скалирование, поворот, перенос. Точнее как это связать с координатами примитивов в блоке.

Цитата:
Сообщение от zamtmn Посмотреть сообщение
ИМХО без "минимального" примера понять ниче не получится
По-моему, dxf формат прост для восприятия, и минимальный пример я дал выше в виде кода. Код блока и примитивы, которые в нем лежат. В частности, это линии и полилинии.

Цитата:
Сообщение от zamtmn Посмотреть сообщение
эту группу 10, ей можно подвинуть точку вставки.
Можно то можно, но не руками же это делать ибо файл поступает от третьих лиц, а в данный момент в этих координатах значится 0,0,0. То есть они никак не влияют на происходящее.
nogaems вне форума  
 
Непрочитано 29.08.2013, 15:46
#6
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,457
<phrase 1=


>> но это мой косяк
Это естественно. и в том и другом случае.

>>Вот я и хотел бы разобраться насчет последовательности применения трех операций, которые обозначены во "вхождении блока": скалирование, поворот, перенос.
Разобраться можно так: сделать таки в автокаде простейший блок, повернуть его (желательно в 3D, т.к. в 2D можно пропустить некоторые особенности) и смотреть что есть в вашей программе, а что есть в автокаде.

>>Точнее как это связать с координатами примитивов в блоке.
Через матрицу СКО вставки блока построенную на основе нормали, переноса, поворот и т.п.


>>По-моему, dxf формат прост для восприятия, и минимальный пример я дал выше в виде кода.
В этом минимальном примере только определение блока. И что с тим делать? в блокноте дописывать всё остольное и смотреть как оно откроется в автокаде? А в примере постом выше несколько мегабайт "прост для восприятия" смотреть это никто даже нестанет.

и да:
Не мешало бы прояснить что за программа и привести куски кода обрабатывающие определения и вставки блоков
zamtmn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Проблема с базовой точкой блока и вхождением блока в DXF

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема: Смещение аттрибута блока при открытии файла на другой машине kakt00z AutoCAD 6 11.06.2009 23:12
Создание блока (проблема) Малюк AutoCAD 3 12.09.2008 09:34
Проблема с многострочными атрибутами блока vasilyis AutoCAD 7 25.05.2008 08:38
вставка блока в текущий слой (проблема) Serkonst AutoCAD 11 12.01.2008 16:49
Проблема со вставкой блока Autocad2006 V0vik AutoCAD 2 01.09.2006 10:16