AutoCAD 3rdParty

[CAD] 치수 스타일 설정 함수

matesoft 2026. 3. 24. 21:31
반응형

개요

많은 엔지어니가 도면 작업을 하면서 가장 많이 생성하는 객체중의 하나가 치수선이다. 치수선 객체는 복합객체로서 형상을 타켓하는 리더선 부분과 치수를 표현하는 문자 부분으로 나눌 수 있다. 여기서, 리더선 부분은 축척 동작을 하지 않는 형상 객체이고 문자 부분은 축척 동작을 하는 주석 객체이다. 따라서 치수는 형상의 특성과 주석의 특성을 모두 갖는 복합 객체이다. 

 

ObjectARX 나 AutoLISP 또는 VBA를 이용하여 치수 객체를 만들기 위해서는 반드시 치수 스타일 객체를 만들어서 연결 해야만 한다. 그렇지 않으면 오토캐드 데이터베이스에 존재하는 디폴트 치수 스타일이 연결되어 납품 수준의 도면을 만들 수 없다. 여기서, 치수 객체는 치수 스타일에 종속되므로, 오토캐드는 이를 Hard Ownership 관계라고 일컫는다. 두 개의 객체를 Hard Ownership 관계로 묶으면 다음과 같이 2가지 특징이 생긴다. 첫째, 치수 스타일의 속성을 변경하면 연결된 모든 치수 객체가 변경된다. 둘째, 치수 객체를 복사하여 다른 dwg 도면에 붙여 넣으면 치수 스타일도 함께 복사된다. 

 

이번 포스팅에서는 치수 스타일을 생성 할 때 필요한 많은 속성들에 대해 알아보고 코드로 어떻게 제어 할 수 있는지 정리해 본다.

치수 스타일

 

치수 스타일 대화상자에는 다음과 같은 7개의 탭이 존재하고 각 탭당 15개 정도의 옵션이 존재한다.

  • 기호 및 화살표
  • 문자
  • 맞춤
  • 1차 단위
  • 대체 단위
  • 공차

여기서는 각 탭별 실제 오토캐드에서 관리하는 AcDbDimension 객체에서 어떤 변수에 해당하는지 알아 보는 시간을 갖는다. 오토캐드에서는 옵션을 축약된 형태의 변수 이름으로 제공하기 때문에 치수 스타일 대화상자의 옵션 명칭으로는 매칭하기가 쉽지 않다. ObjectARX SDK를 Default Path로 설치하면 다음과 같은 파일을 찾아 볼 수 있다.


C:\Autodesk\ObjectARX_for_AutoCAD_2023_Win_64bit_dlm\inc\dbdimvar.h


위의 파일을 열어보면 치수 스타일의 옵션에 해당하는 함수가 다음과 같이 get 과 set으로 나열되어 있다.

//  -------------------------  Dimension Style get methods
//
virtual int              dimadec  () const;  // new to R15
virtual bool             dimalt   () const;
virtual int              dimaltd  () const;
virtual double           dimaltf  () const;
virtual double           dimaltrnd() const;  // new to R15
virtual int              dimalttd () const;
virtual int              dimalttz () const;
virtual int              dimaltu  () const;
virtual int              dimaltz  () const;
virtual const ACHAR *    dimapost () const;
virtual int              dimarcsym() const;  // new to 2007
virtual double           dimasz   () const;
virtual int              dimatfit () const;  // new to R15
virtual int              dimaunit () const;
virtual int              dimazin  () const;  // new to R15
virtual AcDbObjectId     dimblk   () const;
virtual AcDbObjectId     dimblk1  () const;
virtual AcDbObjectId     dimblk2  () const;
...
//  -------------------------  Dimension Style set methods
//
virtual Acad::ErrorStatus setDimadec  (int              v);  // new to R15
virtual Acad::ErrorStatus setDimalt   (bool             v);
virtual Acad::ErrorStatus setDimaltd  (int              v);
virtual Acad::ErrorStatus setDimaltf  (double           v);
virtual Acad::ErrorStatus setDimaltmzf(double           v);  // new to 2010
virtual Acad::ErrorStatus setDimaltmzs(const ACHAR *    v);  // new to 2010
virtual Acad::ErrorStatus setDimaltrnd(double           v);  // new to R15
virtual Acad::ErrorStatus setDimalttd (int              v);
virtual Acad::ErrorStatus setDimalttz (int              v);
virtual Acad::ErrorStatus setDimaltu  (int              v);
virtual Acad::ErrorStatus setDimaltz  (int              v);
virtual Acad::ErrorStatus setDimapost (const ACHAR *    v);
virtual Acad::ErrorStatus setDimarcsym(int              v);  // new to 2007
virtual Acad::ErrorStatus setDimasz   (double           v);
virtual Acad::ErrorStatus setDimatfit (int              v);  // new to R15
virtual Acad::ErrorStatus setDimaunit (int              v);
virtual Acad::ErrorStatus setDimazin  (int              v);  // new to R15
virtual Acad::ErrorStatus setDimblk   (AcDbObjectId     v);  // new to R15
virtual Acad::ErrorStatus setDimblk1  (AcDbObjectId     v);  // new to R15
virtual Acad::ErrorStatus setDimblk2  (AcDbObjectId     v);  // new to R15
...

 

get method에서 dim prefix를 빼고 set method에서 setDim prefix를 빼면 다음에 설명하는 각 탭별 설명 함수와 정확히 일치한다. 필자도 이렇게 한번 정리한 후에 오토캐드 3rdParty 개발시 많은 도움을 받고 있다.

눈금 너머로 연장

눈금 너머로 연장 화살촉에 기울기, 건축, 눈금, 정수를 사용하거나 표식을 전혀 사용하지 않을 때 치수 보조선 너머로 치수 선을 연장할 거리를 지정 한다.

기준선 간격

기준선 치수의 치수 선 사이에 간격을 설정 한다. 거리를 입력한다. 기준선 치수에 대한 자세한 내용은 DIMBASELINE을 참고 한다. (DIMDLI 시스템 변수)

기호 및 화살표

반응형

문자

문자 정렬 (TIH & TOH)

  • 수평 : 수평 위치로 문자를 위치
  • 치수 선에 정렬 : 문자를 치수 선에 정렬
  • ISO 표준 : 문자가 치수 보조선 안에 있을 때는 치수 선을 따라 문자를 정렬하고, 문자 치수 보조선 밖에 있을 때는 문자를 수평으로 정렬 한다.

수직

 

수평

맞춤

맞춤 옵션

치수보조선 사이에서 사용 가능한 공간을 기준으로 문자 및 화살촉의 배치 조정. 공간 사용이 가능하면 문자 및 화살촉은 치수보조선 사이에 그렇지 않으면 문자와 화살촉은 맞춤 옵션의 설정에 따라 배치.
문자 또는 화살표(최대로 맞춤) – 최대로 맞춤을 기준으로 하여 치수보조선 바깥쪽으로 문자 또는 화살촉을 이동.

  • 문자와 화살촉에 충분한 공간을 사용할 수 있는 경우, 모두 치수보조선 사이에 배치. 그렇지 않으면 문자 또는 화살촉은 최적 맞춤을 기준으로 이동
  • 문자에 대해서만 충분한 공간을 사용할 수 있는 경우, 문자는 치수보조선 사이에 배치하고 화살촉은 치수보조선 외부에 배치
  • 화살촉에 대해서만 충분한 공간을 사용할 수 있는 경우, 화살촉은 치수보조선 사이에 배치하고 문자는 치수보조선 외부에 배치
  • 문자와 화살촉 모두에 공간을 사용할 수 없는 경우, 모두 치수보조선 외부에 배치

화살표 - 치수보조선 바깥쪽으로 먼저 화살촉을 이동한 다음 문자를 이동

1차 단위

대체 단위

0에서 3까지의 DIMALTZ 값은 피트 및 인치 치수에만 영향을 준다.

숫자 의미
0 0 피트를 억제하고 정확하게 0 인치를 억제한다.
1 0 피트를 포함하고 정확하게 0 인치를 포함한다.
2 0 피트를 포함하고 0 인치를 억제한다.
3 0 인치를 포함하고 0 피트를 억제한다.
4 소수 치수에서 선행 0을 억제한다. 예를 들어, 0.5000은 .5000이 된다.
8 소수 치수에서 후행 0을 억제한다. 예를 들어, 12.5000은 12.5가 된다.
12 선행 및 후행 0을 모두 억제한다. 예를 들어, 0.5000은 .5가 된다.

공차

방법

없음 : DIMTOL = 0, DIMLIM = 0
대칭 : DIMTOL = 1, DIMLIM = 0
편차 : DIMTOL = 1, DIMLIM = 0
한계 : DIMTOL = 0, DIMLIM = 1
기준 : DIMTOL = 0, DIMLIM = 0, DIMGAP 음수

반응형