У меня есть файл САПР в формате DXF (rev 10) с некоторыми 2D-чертежами, и я реализую программу для чтения. До сих пор я успешно загрузил все и растеризовал с помощью ImageMagick.

Но дело в том, что я вручную установил масштабирование координат до числа, которое было для меня разумным. Как мне узнать, каков был исходный размер компонентов и какая единица измерения использовалась для рисования? Есть ли какая-то конкретная группа, на которую мне нужно обратить внимание?

Мой заголовок такой:

  0
SECTION
  2
HEADER
  9
$ACADVER
  1
AC1006
  9
$EXTMIN
 10
-14.610075
 20
-14.723197
  9
$EXTMAX
 10
14.556421
 20
15.530217
  9
$LTSCALE
 40
0.000394
  9
$PDMODE
 70
    35
  9
$PDSIZE
 40
0.000315
  0
ENDSEC

Я прочитал, о чем идет речь в каждой части, и, кажется, не нашел ничего, что могло бы мне помочь.

Я хочу знать единицы измерения, потому что хочу иметь возможность точно изменять чертеж, когда он будет построен , например переместите точку на 2 дюйма.

1
aledalgrande 15 Янв 2014 в 08:06
DXF не имеет единиц измерения, как я обнаружил, поискав в Google "единицы DXF".
 – 
Codie CodeMonkey
15 Янв 2014 в 12:07
Означает ли это, что при экспорте чертежей из САПР в этом формате они теряют смысл? Как тогда AutoCAD может читать файлы DXF? Спасибо
 – 
aledalgrande
16 Янв 2014 в 00:18

1 ответ

Лучший ответ

При реализации средства просмотра для файла dxf вам на самом деле не нужно ничего знать о единицах измерения. Если, конечно, вы не собираетесь реализовывать функцию Measure в своем средстве просмотра, тогда все усложняется.

Ваш начальный "масштабный" размер в вашем средстве просмотра может быть определен из информации заголовка, которую вы показали: EXTMIN и EXTMAX - это 2 ключевых элемента информации, которые вам нужны. В вашем примере минимальная координата use3d в файле dxf составляет -14.610075, -14.723197, а максимальная используемая координата - 14.556421,15.530217. Это дает вам общий размер рисунка 29,166496 (ширина) x 30,253414.

Для простого средства просмотра вы можете просто предположить, что единицы в файле DXF равны единицам в вашем средстве просмотра (пиксели или точки или что-то еще, что вы используете).

Тогда базовый размер чертежа в вашем средстве просмотра будет 29.166496x30.253414, и вы можете увеличить его (увеличить), чтобы он заполнял любую доступную область отображения.

ИЗМЕНИТЬ

Файлы DXF ни в коем случае не являются «безразмерными», поэтому в случае, когда вам абсолютно необходимо знать единицы, вам нужно будет прочитать значение кода группы $INSUNITS, а для его перепроверки вы также можете прочитать Значение кода группы $MEASUREMENT.

Вся информация содержится в R2000 dxf spec или любой другой версии. вам нужно знать, что означают эти значения. Если вы перейдете на страницу «Коды групп раздела заголовка» и выполните поиск по запросу «единицы», вы сможете найти список всех типов единиц. Например:

$INSUNITS
 70
     4

Указывает, что в файле dxf в качестве базовой единицы используются метрические единицы, в частности миллиметры. Таким образом, любое размерное или координатное значение, хранящееся в файле dxf, будет в миллиметрах.

Единицы чертежа по умолчанию для блоков AutoCAD DesignCenter: 0 = Без единиц; 1 = дюймы; 2 = Ноги; 3 = Мили; 4 = миллиметры; 5 = сантиметры; 6 = метры; 7 = километры; 8 = микродюймы; 9 = Мил; 10 = Ярды; 11 = Ангстремы; 12 = нанометры; 13 = микроны; 14 = дециметры; 15 = декаметры; 16 = Гектометры; 17 = гигаметры; 18 = Астрономические единицы; 19 = Световые годы; 20 = Парсек

ИЗМЕНИТЬ

Я только что заметил, что вы используете очень старый формат dxf (R10). Если я правильно помню, устройства не были включены в спецификацию DXF примерно до R12. До этого фактический размер объектов чертежа не менялся в зависимости от предполагаемых единиц. Только надписи на размерах отличались от имперских до метрических единиц.

Если вы настроены на использование старого формата R10, вам просто нужно будет принять произвольное решение о том, какие единицы измерения; при условии, что на ваших чертежах нет меток с размерами, которые указывали бы, какие единицы измерения подразумеваются.

5
Stewbob 17 Янв 2014 в 01:30
Спасибо @Stewbob. Не могли бы вы объяснить, что вы имеете в виду под функцией Measure?
 – 
aledalgrande
16 Янв 2014 в 23:47
PS: Что, если я хочу реализовать программу просмотра, которая также может строить график?
 – 
aledalgrande
16 Янв 2014 в 23:55
1
Если вы хотите, чтобы пользователь мог измерить элементы в файле dxf и получить ответ типа «12,2 дюйма» или «43 мм», тогда вам нужно будет беспокоиться об единицах измерения.
 – 
Stewbob
17 Янв 2014 в 00:29
1
Если вы хотите нанести рисунок на печать, обычно вы просто масштабируете рисунок по размеру бумаги. Если вас беспокоит печать в масштабе 1: 1, где 10 мм на чертеже равняется 10 мм на распечатанной странице, то вам следует беспокоиться о единицах измерения; но если вы это делаете, я бы порекомендовал любое количество хороших сторонних пакетов САПР.
 – 
Stewbob
17 Янв 2014 в 00:32
Это именно то, что я хочу сделать, построить график в масштабе 1: 1. Это не пользователь, который будет измерять функции, а скорее какая-то реализованная логика, которая должна будет изменить эти функции на произвольное количество единиц (например, +2 дюйма). Это часть моего движка, поэтому я не могу использовать стороннее программное обеспечение САПР :) Вы знаете какую-либо документацию по измерениям?
 – 
aledalgrande
17 Янв 2014 в 00:55