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();
}
}
}
코드 설명:
- 명령어 정의: [CommandMethod("GetBlockPositions")]는 AutoCAD에서 GetBlockPositions 명령어를 실행할 수 있도록 해줍니다.
- 블록 필터 설정: TypedValue[] 배열을 사용하여 블록(INSERT 객체 타입)만 선택하도록 필터를 설정합니다.
- 블록 선택: Editor.GetSelection을 사용해 필터된 객체를 선택합니다.
- 블록 위치 추출: BlockReference.Position을 통해 블록의 삽입점 좌표를 가져오고, 이를 출력합니다.
실행 방법:
- Visual Studio에서 C# 프로젝트를 생성하고, 위 코드를 붙여넣습니다.
- 프로젝트에서 AutoCAD DLL을 참조합니다 (acdbmgd.dll, acmgd.dll).
- 빌드한 DLL을 AutoCAD에서 로드합니다:
- AutoCAD 명령줄에서 NETLOAD를 입력하고 생성된 DLL 파일을 로드합니다.
- AutoCAD 명령줄에 GetBlockPositions을 입력하여 블록들의 위치를 출력합니다.
이 코드는 선택한 모든 블록의 위치를 X, Y, Z 좌표로 출력합니다.
'AutoCAD C#' 카테고리의 다른 글
[AutoCAD C#]AutoCAD Palette 배경색상 설정 (0) | 2024.11.09 |
---|---|
[AutoCAD C#]원 그리기 (Layer, Color) 예제 (2) | 2024.04.26 |
[AutoCAD C#]오토캐드에서 선택한 객체 정보를 보여준다. (0) | 2024.02.28 |
[AutoCAD C#]오토캐드에서 블럭(Block)들을 수량과 레이어(Layer) 구분하여 출력하기 (1) | 2024.02.27 |
[AutoCAD C#]오토캐드에서 블럭(Block)을 선택, 레이어 변경하기 (0) | 2024.02.25 |