AutoCAD/C#.NET Plugin

[AutoCAD]*.dll Autoload하는 방법 (a.k.a plugin)

ju_young 2020. 12. 23. 12:59
728x90

본 글은 AutoCAD 2020을 기준으로 설명합니다.

 

폴더 구성

 

우선 아래 캡쳐 사진과 같은 경로로 들어갑니다.

C:\ProgramData\Autodesk\ApplicationPlugins

해당 경로로 들아가게되면 *.bundle 형식으로 이름이 지정된 폴더가 몇 개 있을 겁니다.

이 중에서 하나.... 음...  C360addin.bundle 폴더를 열어봅시다.

 

C360addin.bundle

폴더를 열면 위의 캡쳐 사진처럼 Contents 폴더와 PackageContents.xml이 구성되어 있을 겁니다.

(Contents 폴더 안에 무엇이 있는지는 신경쓰지 않겠습니다.)

 

우리도 C360addin.bundle 폴더 구성처럼 새 폴더를 만들고 Contents폴더와 PackageContents.xml 파일을 만들겠습니다.

저는 Command.bundle이라는 이름의 폴더를 만들었습니다.

PackageContents.xml 파일은 빈 메모장이어도 상관없고 이전에  C360addin.bundle 폴더 안에 있던 파일을 복사해서 가져와도 상관없습니다.

 

Command.bundle

 

XML 파일 수정

자, 이제 PackageContents.xml 파일을 메모장으로 열어서 안에 내용이 있다면 다 지워줍시다.

 

그리고 아래의 내용을 복사 붙여넣습니다.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationPackage SchemaVersion="1.0" ProductType="Application" Name="Command" AppVersion="1.0" Description="Command" Author="Jade" FriendlyVersion="1.0" AutodeskProduct="AutoCAD">
<CompanyDetails Name="Jade"/>
  <Components>
    <RuntimeRequirements SupportPath="./Contents/CircleOrRecNumber" OS="Win32|Win64" Platform="AutoCAD*" SeriesMin="R19.0" SeriesMax="R23.1" />
    <ComponentEntry AppName="CircleOrRecNumber" Version="1.0" ModuleName="./Contents/CircleOrRecNumber/CircleOrRecNumber.dll" LoadOnAppearance="True" LoadOnAutoCADStartup="True" LoadOnCommandInvocation="True">
      <Commands GroupName="CircleOrRecNumber">
        <Command Local="MLNUMBER" Global="MLNUMBER" />
      </Commands>
    </ComponentEntry>
  </Components>
  <Components>
    <RuntimeRequirements SupportPath="./Contents/CircleNumber" OS="Win32|Win64" Platform="AutoCAD*" SeriesMin="R19.0" SeriesMax="R23.1" />
    <ComponentEntry AppName="CircleNumber" Version="1.0" ModuleName="./Contents/CircleNumber/CircleNumber.dll" LoadOnAppearance="True" LoadOnAutoCADStartup="True" LoadOnCommandInvocation="True">
      <Commands GroupName="CircleOrRecNumber">
        <Command Local="CIRCLENUMBER" Global="CIRCLENUMBER" />
      </Commands>
    </ComponentEntry>
  </Components>
</ApplicationPackage>

 

ApplicationPackage

<ApplicationPackage SchemaVersion="1.0" ProductType="Application" Name="Command" AppVersion="1.0" Description="Command" Author="Jade" FriendlyVersion="1.0" AutodeskProduct="AutoCAD">

여기서 수정해도되는 것은 Name, Description, Author입니다. 단어 뜻대로 이름, 설명, 작성자이기때문에 맘대로 집어넣으시면 됩니다.

 

CompanyDetails

<CompanyDetails Name="Jade"/>

여기서도 Name은 아무거나 집어넣어도 됩니다.

 

RuntimeRequirements

    <RuntimeRequirements SupportPath="./Contents/CircleOrRecNumber" OS="Win32|Win64" Platform="AutoCAD*" SeriesMin="R19.0" SeriesMax="R23.1" />

이 부분에서 SupportPath와 SeriesMin, SeriesMax가 아주 중요합니다.

  • SupportPath : *.dll 파일이 있는 경로를 작성합니다.
  • SeriesMin : AutoCAD의 최소 버전을 작성 (R19.0 = AutoCAD2013)
  • SeriesMax : AutoCAD의 최대 버전을 작성 (R23.1 = AutoCAD2020)

OS가 Mac이라면 "Win32|Win64|Mac"이라고 수정하세요.

 

ComponentEntry

    <ComponentEntry AppName="CircleOrRecNumber" Version="1.0" ModuleName="./Contents/CircleOrRecNumber/CircleOrRecNumber.dll" LoadOnAppearance="True" LoadOnAutoCADStartup="True" LoadOnCommandInvocation="True">

여기서는 AppName과 ModuleName만 바꾸면됩니다. AppName은 아무거나 알아보기 쉬운 단어로 작성하시고 ModuleName은 해당 *.dll이 있는 경로를 집어넣으세요.

 

Commands

      <Commands GroupName="CircleOrRecNumber">
        <Command Local="MLNUMBER" Global="MLNUMBER" />
      </Commands>

Commands는 해당 *.dll의 Command를 정의해주는 구간인데요.

GroupName은 그냥 ComponentEntry에서 작성한 AppName과 똑같이 작성하세요. 싫으시면 다르게 작성하셔도 됩니다.

Command는 Local, Global에 *.dll에 있는 명령어를 집어넣어주면 됩니다. 명령어가 여러개라면 Command문을 여러개 작성해주시면 됩니다.

<Command ~/>
<Command ~/>

이렇게요.

 

*.dll 파일이 하나 더 있다면

<Components>

~~~

</Components>

의 단위로 추가해주시면 됩니다.

 

위에 있는 전체 xml 내용을 보시면 무슨 말인지 아실 겁니다.

 

*.dll 파일 배치

위에서 XML파일을 수정한 과정을 거치면서 *.dll 파일을 어디에 위치시켜야할지 아시겠죠?

 

1. RuntimeRequirements 에서의 SupportPath

2. ComponentEntry 에서의 ModuleName

위 두가지의 경로에 맞는 위치에 *.dll을 집어넣으면 됩니다.

 

어? 그런데 위에서 XML파일을 수정할때 *.dll 위치를 "./Contents"로 안하고 폴더를 따로 만들어서 "./Contents/CircleOrRecNumber"와 같은 경로를 만들었습니다.

 

그 이유는 "./Contents"에 모든 *.dll을 불러오면 일부 *.dll만 불러와지고 안불러오는 *.dll이 발생합니다.

이 부분은 제가 잘 몰라서 발생한 에러일 수도 있습니다. 하지만 저는 폴더를 따로 생성하여 각각의 *.dll 파일을 배치시켜서 해결하였습니다.

 

Contents 폴더 구성

위의 캡쳐 사진과 같이 각 폴더를 구성하여 *.dll 파일을 배치시키면 됩니다.

728x90