2017-10-11 28 views
1

엔티티를 선택하고 수정하기 위해 MVVM 패턴을 만드는 AutoCAD .net 프로젝트에서 작업하고 있습니다. 선택한 엔티티의 정보/값을 뷰 모델에 저장하고 (WPF UI를 통해 팝업하고 내 코드를 통해) 정보/값을 변경 한 다음 엔티티에 변경 사항을 적용합니다.AutoCAD. ObjectId를 사용하지 않고 객체 ID를 저장하고 검색하는 중

문제는 : 변경 사항을 엔티티에 적용하려면 "어느"엔티티가 변경 사항을 수신해야 하는지를 알아야합니다. 따라서 ObjectId 객체를 저장하고 AutoCAD의 acdbmgd.dll에서 ObjectId 구조체를 사용하지 않고 나중에 가져오고 싶습니다. AutoCAD의 특정 버전에 따라 UI 프로젝트가 달라지기 때문에 AutoCAD의 acdbmgd.dll이 필요합니다 (예 : UI 프로젝트가 작동하는 REQUIREMENT). .net 프레임 워크 만).

내가 할 수있는 방법이 있습니까? objectId를 객체에 저장 한 다음 objecId로 다시 캐스팅하려고하지만 작동하지 않습니다. 도와주세요. 고맙습니다.

+0

데이터베이스의 'ObjectId'유형은 무엇입니까? – grek40

+0

정말 당신의 질문을 이해하지 못해 죄송합니다. 1. "엔티티 ObjectId"는 변경하려는 엔티티의 ID입니다. 2. "ObjectId"유형이 : Autodesk.AutoCAD.DatabaseServices.ObjectId입니다. 그리고 구조체입니다. 이것이 원하는 내용이 아니라면 설명해주십시오. 나는 초보자이기 때문에 잘 모릅니다. –

+0

UI 프로젝트가 닷넷 프레임 워크 이외의 것에 의존 할 수 없다고한다면, UI 프로젝트가 모델 프로젝트에 의존하고 모델 프로젝트가 AutoCAD에 의존하는 것은 괜찮다는 것을 의미합니다. ModelProject의 인터페이스는 AutoCAD와는 별개이므로 UI ​​프로젝트는 AutoCAD에 직접 의존하지 않습니다. 그렇지 않으면 AutoCAD와 UI 간의 데이터 전송이 어떻게 작동하는지 이해하지 못합니다 – grek40

답변

0

그리기에있는 모든 엔터티는 3에서 검색 할 수 있습니다. 고유 한 방법 : ObjectID, Handle 및 인스턴스 포인터. 객체 ID는 도면 데이터베이스를 열 때마다 각 엔티티에 대해 작성되므로 현재 도면이 닫힐 때까지 유일합니다. 다시 열면 ObjectID은 완전히 다릅니다. 그러나 손잡이는 세션간에 지속되며, 진부한 말처럼 길고 뒤쪽으로 변환 될 수 있습니다. 세션간에 엔티티에 대한 참조를 유지하는 데 신경 쓰는지는 모르지만 적어도 데이터 유형 문제는 해결됩니다. 저를 믿으십시오, 나는 당신의 주요 어셈블리에서 분리 된 오토 데스크를 유지하려는 당신의 욕구를 완전히 이해합니다. This post에는 필요한 모든 정보가 있습니다.

+0

제안을 주셔서 감사합니다. 뷰 모델의 문자열 필드로 엔티티 핸들을 저장 한 다음 나중에 복구하여 검색 할 수있는 해결책을 찾았습니다. 그것의 ObjectId는 다음과 같습니다 : viewModel.EntityHandle = entity.Handle.ToString(); ObjectId cylinderId = acDb.GetObjectId (false, 새 핸들 (Convert.ToInt64 (viewModel.EntityHandle, 16)), 0); 이전에 직접 엔티티를 검색하기 위해 핸들을 사용하지 않습니다. 그것은 더 쉽고 더 나은 성능이 될 것입니까? 귀하의 조언을 많이 부탁드립니다. 지저분한 의견을 보내 주셔서 죄송합니다. 줄 바꿈으로 여전히 어려움을 겪고 있습니다. –

+0

핸들을 사용하여 엔티티에 직접 액세스 할 수 있다고 생각하지 않습니다. .Net API는 Handle을 사용하여 검색 할 수있는 모든 것을 ObjectID로 사용합니다. 핸들을 사용하는 주된 이유 중 하나는 세션간에 주어진 도면의 특정 엔티티에 대한 지속적인 참조를 갖는 것입니다. – Nik

0

ObjectId 대신 핸들 값을 (long)으로 저장할 수 있습니다. 엔터티를 가져올 때 핸들 값을 AutoCAD Handle로 변환해야하지만 그 핸들을 벗어날 방법이 보이지 않습니다.