AutoCAD 3rdParty

[CAD] ObjectARX Wizard 만들기

matesoft 2026. 3. 8. 15:30
반응형

개요

AutoCAD 3rdParty 프로그램을 만들기 위해서는 다음과 같은 4가지 언어를 활용하여 만들 수 있다.

  • C++  : Object ARX
  • C#    : Object ARX
  • VB    : Object Model
  • LISP : AutoLISP

LISP언어는 AutoLISP IDE 개발 환경으로 리스트 자료 구조를 통한 AutoCAD 내장 라이브러리를 사용하여 파워풀한 기능을 재 생산해 낼 수 있다. 또한 토목 엔지니어링 업계에서도 프로그램에 관심이 있는 엔지니어는 도메인 지식과 LISP언어를 접목해서 해당 분야의 생산성을 높일 수 있는 여러가지 기능들이 탑재된 LISP 프로그램을 많이 만들어서 활용하고 있다. 실제로 AutoCAD의 AutoLISP IDE 뿐만 아니라 최근에는 Visual Studio Code라는 통합개발환경(IDE)을 통해 LISP 프로그램을 개발하고 디버깅하는 엔지니어도 있다.

 

VB(Visual Basic)는 MS에서 만든 언어로 전 세계인의 프로그래밍을 모토로 쉽게 접근할 수 있는 방법을 제공한다. AutoCAD에서 제공하는 Object Model SDK를 이용하면 프로그램 언어를 모르는 불특정 다수도 관심이 있다면 단 기간에 AutoCAD 3rdParty 기능을 개발할 수 있는 환경을 제공한다.

 

다음은 ObjectARX SDK를 활용한 AutoCAD 3rdParty에 대한 내용이다. ObjectARX SDK를 이용하여 AutoCAD 3rdParty 기능을 만들기 위해서는 C++언어와 ARX SDK의 Class Hierachy 그리고 AutoCAD의 기능들에 대해서 알아야 한다.

오늘의 주제는 ObjectARX2023 SDK를 설치한 후 Visual Studio IDE를 이용하여 AutoCAD 기능을 개발하고 싶은 엔지니어에게 ARX 프로젝트를 쉽게 만들기 위한 Wizard를 만드는 방법에 대한 기술이다. 토목 엔지니어는 기본적으로 AutoCAD는 능숙하게 사용하고 있지만, C++과 ARX SDK는 다소 생소할 수 있다. 그럼에도불구하고 Visual Studio의 ObjectARX Wizard 생성 기능을 소개하는 이유는 ObjectARX SDK를 이용하여 개발하면 최상의 Performance를 얻을 수 있기 때문이다. 앞서 소개한 다른 언어 대비 약 10배의 속도와 내 지식의 깊이와 효용의 깊이가 비례하는 경험을 할 수 있다. 최근에는 AI의 발달로 인해 ObjectARX의 진입 장벽도 다소 낮아졌다. 필자가 테스트한 AI중 Claud Ai는 ObjectARX SDK의 능숙한 참고 자료가 될 수 있겠다.

 

하기 기술은 Visual Studio 2019 Template에 ObjectARX Wizard를 만드는 것을 목표로 한다.

ObjectARX Wizard 만들기

1) 필요한 파일

  • Visual Studio 2019 Community 버전 (무료)
  • AutoCAD 2023
  • ObjectARX 2023 SDK
    • SDK 이름 : ObjectARX_for_AutoCAD_2023_Win_64bit_dlm.sfx.exe
  • ObjectARX Wizard 파일
    • ObjectARX-Wizards-ForAutoCAD2023.zip

2) 다운 받는 곳

 

AutoCAD ObjectARX SDK downloads

ObjectARX for AutoCAD SDK downloads

aps.autodesk.com

 

3) 설치 과정

 

3-1) ObjectARX 2023 SDK 설치

다운로드 받은 [ObjectARX_for_AutoCAD_2023_Win_64bit_dlm.sfx.exe] 파일을 실행 한다. 실행 한 후 물어보는 모든 경로(Path)는 Default로 놔두고 진행하면 된다.

 

3-2) ObjectARX 2023 Wizard 설치

  • 상기 깃 허브에서 다운 받은 파일은  zip 파일이다. (ObjectARX-Wizards-ForAutoCAD2023.zip)
  • 위 zip 파일을 임의의 위치에 압축을 푼다.
  • 그러면 아래 그림처럼 폴더가 생긴다.

  • 폴더(ObjectARXWizardInstaller)로 들어가서 다음 파일을 찾는다.
  • ObjectARXWizards-2023.zip
  • 이 파일의 압축을 ObjectARX 2023 SDK 설치 폴더 C:\Autodesk\ 에 푼다.
  • C:\Autodesk\ObjectARXWizard2023.msi 파일을 관리자 권한으로 실행한다. (반드시)
    • MSI 파일을 관리자 권한으로 실행하는 방법
      1. Win키 + S를 누르고 cmd를 검색한다.
      2. 명령 프롬프트를 관리자 권한으로 실행한다.
      3. msiexec /i "경로\ObjectARXWizard2023.msi"

 

3-3) 정상적으로 설치된 것 확인

정상적으로 설치 되었다면 위 그림과 같은 경로에 ObjectARX Wizard Template 파일들이 만들어져 있어야 한다. 그러면 이제 모든 준비는 끝났다. 새 프로젝트를 만들고 ARX/DBX project for AutoCAD 2023 템플릿을 선택하면 ObjectARX Wizard Welcome 대화상자를 만날 수 있다.

참고로, 해당 템플릿으로 ARX 기능을 만들면 다음과 같은 AutoCAD 버전에서 사용 가능하다.

  • AutoCAD 2021
  • AutoCAD 2022
  • AutoCAD 2023

4) ObjectARX Wizard Template

설치 과정이 모두 완료되었다면 Visual Studio 2019 Community 버전을 실행 하고 새 프로젝트 만들기를 선택한다.

 

새 프로젝트 만들기를 선택한 후 스크롤을 맨 아래쪽으로 내리면 다음과 같이 ARX/DBX Project for AutoCAD 2023이라는 항목이 생성되어 있다.

프로젝트 이름과 솔루션 이름을 입력 한 후 만들기 버튼을 누르면 다음과 같이 Object ARX 전용 Wizard 대화상자가 나타난다. 이 Wizard 대화상자를 통해 MFC Extension DLL을 사용할 수도 있고 때에 따라서는 Custom Entity를 만들 수도 있다.

ObjectARX Wizard Welcome

 

예제

위와 같이 Visual Studio 2019에서 ARX 프로젝트를 만든 후 acrxEntiryPoint.cpp 파일에서 명령을 만들고 원하는 기능을 코딩을 하면 3rdParty 기능을 *.arx 파일로 만들 수 있다.

필자가 만든 자동 치수선 (https://matesoft.tistory.com/1) 기능도 Wizard를 통해 뼈대를 만들고 알고리즘을 추가하여 완성 하였다.

다음은 ObjectARX SDK를 활용하여 만든 Line과 Circle 객체의 생성 샘플 코드이다.

AcDbObjectId createLine()
{
    AcGePoint3d startPt(4.0, 2.0, 0.0);
    AcGePoint3d endPt(10.0, 7.0, 0.0);
    AcDbLine *pLine = new AcDbLine(startPt, endPt);
    AcDbBlockTable *pBlockTable;
    acdbHostApplicationServices()->workingDatabase()
        ->getSymbolTable(pBlockTable, AcDb::kForRead);
    AcDbBlockTableRecord *pBlockTableRecord;
    pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
        AcDb::kForWrite);
    pBlockTable->close();
    AcDbObjectId lineId;
    pBlockTableRecord->appendAcDbEntity(lineId, pLine);
    pBlockTableRecord->close();
    pLine->close();
    return lineId;
}
AcDbObjectId createCircle()
{
    AcGePoint3d center(9.0, 3.0, 0.0);
    AcGeVector3d normal(0.0, 0.0, 1.0);
    AcDbCircle *pCirc = new AcDbCircle(center, normal, 2.0);
    AcDbBlockTable *pBlockTable;
    acdbHostApplicationServices()->workingDatabase()
        ->getSymbolTable(pBlockTable, AcDb::kForRead);
    AcDbBlockTableRecord *pBlockTableRecord;
    pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
        AcDb::kForWrite);
    pBlockTable->close();
    AcDbObjectId circleId;
    pBlockTableRecord->appendAcDbEntity(circleId, pCirc);
    pBlockTableRecord->close();
    pCirc->close();
    return circleId;
}
반응형