AutoCAD .NET API를 사용하여 엔티티에 하이퍼링크 생성하는 방법?
원본 게시물
AutoCAD에서 엔티티는 하이퍼링크와 연결될 수 있습니다. 사용자는 엔티티의 하이퍼링크를 통해 참조된 위치로 이동할 수 있습니다. AutoCAD 엔티티에 적용할 수 있는 하이퍼링크 유형에는 URL, 파일, DWG 파일 타겟(모델, 레이아웃 등)이 있습니다. 이 글에서는 .NET API를 사용하여 엔티티에 URL 형식의 하이퍼링크를 생성하는 방법을 보여줍니다. 코드는 C#으로 작성되었습니다.
[CommandMethod("createHLink")]
static public void CmdCreateHyperLink()
{
Editor ed = Application.DocumentManager.
MdiActiveDocument.Editor;
Database db = Application.DocumentManager.
MdiActiveDocument.Database;
PromptEntityResult selectedEntity =
ed.GetEntity("엔티티를 선택하세요: ");
ObjectId objectId = selectedEntity.ObjectId;
try
{
using (Transaction trans =
db.TransactionManager.StartTransaction())
{
// 엔티티 가져오기
Entity ent = trans.GetObject(objectId,
OpenMode.ForWrite) as Entity;
// 엔티티의 하이퍼링크 컬렉션 가져오기
HyperLinkCollection linkCollection = ent.Hyperlinks;
// 새로운 하이퍼링크 생성
HyperLink hyperLink = new HyperLink();
hyperLink.Description = "ADN DevBlog";
hyperLink.Name = "ADN DevBlog";
hyperLink.SubLocation =
"http://adndevblog.typepad.com/autocad/";
// 하이퍼링크를 컬렉션에 추가
linkCollection.Add(hyperLink);
trans.Commit();
}
}
catch (System.Exception ex)
{
ed.WriteMessage(ex.Message);
}
}
문제 발생:
같은 작업을 반복 실행하면,
후속 작업 시 기존 하이퍼링크를 교체하려고 하면,
직접 삭제하면 프로그램이 중단되는 문제가 발생합니다.
게시판에 올라온 VB 코드는 이해가 안 되어,
C#으로 변환하지 못했습니다.
나는 스스로 다음과 같은 방법을 시도했고,
결과적으로 원하는 대로 작동했습니다:
if (ent.Hyperlinks.Count > 0)
{
//ent.Hyperlinks[0].Name = csvName;
HyperLink hl = new HyperLink();
hl.Name = csvName;
hl.Description = ent.Hyperlinks[0].Description;
ent.Hyperlinks.RemoveAt(0);
ent.Hyperlinks.Insert(0,hl);
///2020년 2월 20일
///하이퍼링크를 직접 지우면 프로그램이 중단됨
///add로 새로운 링크를 추가해도 기존 링크가 여전히 표시됨
///RemoveAt(0)도 효과 없음
///Insert(0,hl)로 새로운 링크를 삽입하면 원하는 결과 얻음
///정말 이상한 일이죠!
}