AutoCAD C#

[AutoCAD C#]AutoCAD에서 C# 코드를 이용하여 선택한 블록들의 위치 출력

데브프로그라 2024. 10. 9. 22:41
반응형

AutoCAD에서 선택한 블록들의 위치를 C#으로 구현하려면 AutoCAD .NET API를 사용해야 합니다. 이 API를 통해 AutoCAD 객체를 조작하고 정보를 추출할 수 있습니다. 아래는 AutoCAD에서 선택된 블록들의 위치를 추출하는 예제입니다.
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;

public class BlockLocation
{
    [CommandMethod("GetBlockPositions")]
    public void GetBlockPositions()
    {
        // 현재 도면의 Editor 가져오기
        Document doc = Application.DocumentManager.MdiActiveDocument;
        Editor ed = doc.Editor;

        // 선택할 블록 필터 설정
        TypedValue[] filter = new TypedValue[]
        {
            new TypedValue((int)DxfCode.Start, "INSERT") // "INSERT"는 블록을 의미
        };

        // 객체 선택 옵션 설정
        SelectionFilter selFilter = new SelectionFilter(filter);
        PromptSelectionResult selRes = ed.GetSelection(selFilter);

        // 선택이 유효한지 확인
        if (selRes.Status != PromptStatus.OK)
        {
            ed.WriteMessage("\nNo blocks were selected.");
            return;
        }

        // 선택된 객체를 순회하며 블록의 위치 추출
        using (Transaction trans = doc.TransactionManager.StartTransaction())
        {
            SelectionSet selSet = selRes.Value;
            foreach (SelectedObject selObj in selSet)
            {
                if (selObj != null)
                {
                    // 선택한 객체가 블록이면
                    BlockReference blkRef = trans.GetObject(selObj.ObjectId, OpenMode.ForRead) as BlockReference;
                    if (blkRef != null)
                    {
                        // 블록의 삽입점 좌표 가져오기
                        Point3d position = blkRef.Position;
                        ed.WriteMessage($"\nBlock at: X = {position.X}, Y = {position.Y}, Z = {position.Z}");
                    }
                }
            }

            trans.Commit();
        }
    }
}

 

코드 설명:

  1. 명령어 정의: [CommandMethod("GetBlockPositions")]는 AutoCAD에서 GetBlockPositions 명령어를 실행할 수 있도록 해줍니다.
  2. 블록 필터 설정: TypedValue[] 배열을 사용하여 블록(INSERT 객체 타입)만 선택하도록 필터를 설정합니다.
  3. 블록 선택: Editor.GetSelection을 사용해 필터된 객체를 선택합니다.
  4. 블록 위치 추출: BlockReference.Position을 통해 블록의 삽입점 좌표를 가져오고, 이를 출력합니다.

실행 방법:

  1. Visual Studio에서 C# 프로젝트를 생성하고, 위 코드를 붙여넣습니다.
  2. 프로젝트에서 AutoCAD DLL을 참조합니다 (acdbmgd.dll, acmgd.dll).
  3. 빌드한 DLL을 AutoCAD에서 로드합니다:
    • AutoCAD 명령줄에서 NETLOAD를 입력하고 생성된 DLL 파일을 로드합니다.
  4. AutoCAD 명령줄에 GetBlockPositions을 입력하여 블록들의 위치를 출력합니다.

이 코드는 선택한 모든 블록의 위치를 X, Y, Z 좌표로 출력합니다.

반응형