2016-06-18 2 views
0

실제 기술 프로그래밍보다 "우수 사례"에 관한 더 많은 이론 인 질문이 있습니다.Revit API 작성 후 요소 편집

요소를 프로그램에서 배치 한 후에 요소를 편집하는 가장 좋은 방법을 생각하고 있습니다. 특히 내 프로그램을 다음과 같이 설정했습니다.

사용자는 "Revit에서 프로젝트에 일부 패밀리를 추가"하는 도구를 클릭합니다. 사용자가 만든 스케치를 읽고 스케치를 기반으로 항목을 배치합니다.

Element creation

Sketch

나는 사용자에게 바닥 슬래브 말을 비슷한 이러한 요소의 "스케치를 편집"할 수있는 능력을주고 싶다. Revit API가 "스케치 모드"를 사용하여 스케치하는 기능을 제공한다고 생각하지 않습니다. 내 프로그램에서이 매우 유용한 기능을 모방하려고합니다.

그래서 내가 한 것은 확장 가능한 저장 공간을 사용하고 내 도구를 사용하여 만든 모든 요소에 고유 항목을 저장하는 것입니다. 프로그램이하는 일은 사용자가 "요소 편집"도구를 클릭하고, 프로그램이 새로운 스케치를 요청하고, 기존 요소를 클릭하도록 요청하고, 기존 요소의 UniqueId를 읽고, 해당 UniqueId로 모든 요소를 ​​호출 한 다음 삭제할 때입니다. 프로그램은 사용자 "새 스케치"를 사용하여 새 요소를 프로젝트에 다시 추가합니다.

사용자가 프로젝트에 추가 된 원래 요소를 삭제 한 다음 편집하려고하면 UniqueId가있는 원래 요소를 삭제하지 않을 것이라고 어떻게 보장합니까? 이동 방법은 Revit API에서 동적 모델 업데이트 기능을 사용하는 것입니다.

대부분의 알고리즘은 어떻게 쓰여 있습니까? 나는 올바른 길을 가고 있는가? 고유 번호를 요소에 할당하고 요소 자체에 저장하므로 나중에 호출 할 수 있습니까? 어쩌면 내가 누락 한 퍼즐의 기본적인 이론적 인 부분이있을 수 있습니다. 데이터 구조?

답변

0

나는 당신이 본질적으로 올바른 길에 있다고 생각합니다.

고유 한 ID를 저장하기 위해 확장 가능한 저장소를 사용하는 것은 확실히 이동하는 방법이며, DMU 동적 모델 업데이터 기능을 사용하여 변경 사항에 반응하는 것이 좋습니다.

명확하지 않은 것 중 하나는 요소가 작성 될 때 Revit이 요소에 고유 ID를 자동으로 할당한다는 사실입니다. 사용자가 영향을 미치기 위해 할 수있는 일은 없습니다. 고유 ID는 고유하고 변경할 수 없으며 사용자는이를 제어 할 수 없습니다.

따라서 가장 쉬운 방법은 이전 스케치 요소를 모두 삭제하고 전체 스케치와 스케치를 수정해야 할 때마다 처음부터 스케치 요소를 정의하는 모든 요소를 ​​다시 만드는 것입니다.

+0

답변 해 주셔서 감사합니다. 문제를 해결하기 위해 확장 가능한 저장소를 사용하고 단일 uniqueid를 만드는 중이며 해당 스케치에 속한 모든 요소에 적용됩니다. 따라서 스케치를 편집 할 때 소프트웨어는 해당 스키마와 엔티티의 필드에 할당 된 ubique ID를 찾습니다. 내가 가진 독창적 인 것은 통제 할 수있다. 또한 Revit API 도움말 항목을 많이 읽은 후에 고유 한 ID는 고유 한 프로젝트로 요소를 복사 할 수 있기 때문에 갈 방법입니다. 맥스 니스, 엘리 시디 스에서 이런 일이 일어날 수 있다고 말씀하시는 겁니까? – pirit4

+0

확장 가능한 저장소에 저장된 요소 ID를 사용하는 경우 revit은 지능적인 방법으로 관계 변환을 처리합니다. http://thebuildingcoder.typepad.com/blog/2011/06/extensible-storage-features.html#7 –

0

작업 공유 업데이트가 발생할 때 ElementId가 새 ElementId로 자동 매핑되기 때문에 UniqueId 대신 StructIed Storage를 사용해야합니다. ElementId는 요소가 삭제 될 때 ElementId.InvalidElementId로 설정됩니다.

+0

동의하다! 그것을 지적 해 주셔서 감사합니다! 여기에 대한 참고 사항 : http://thebuildingcoder.typepad.com/blog/2011/06/extensible-storage-features.html#7 –

관련 문제