VISIO 와 유사한 어플에서 파일 포맷을 정의할 때는??
[devpia]에도 이 질문 올렸는데, 여기도 올립니다. 양해부탁드립니다.
(Visual C++에 국한된 문제는 아니거든요.)
MS사의 VISIO를 보면, 왼쪽에 스텐실이 있고, 거기서 Block들을 끌어다가
화면에서 구성을 하게 됩니다. 거기서 각각을 선으로 연결하고 전체 diagram을 완성하게 되는데요.
(.vsd 확장자로 전체가 저장이 되죠?)
제가 그와 유사하게 Block들을 drag & drop을 지원하면서, diagram을 구성해서 전체 정보를 저장하는 프로그램을 개발하려고 합니다.
(MATLAB의 Simulink와 유사하다고 보시면 됩니다.)
그런데, 차이는 사용자가 직접 정의한 Block을 저장한 후 그 Block도 재사용이 가능하다는 점이 있습니다.
그래서 이 어플리케이션에서 저장해야할 형태로는, 전체 diagram 구성도(visio의 vsd같은...)를
파일로 저장하기, 그리고 사용자가 정의한 block을 파일로 저장하는 형태가 있습니다.
diagram은 각종 block들과 그 block들을 선으로 연결한 것, 그리고 각종 부가 정보(block에 내포될 config정보, block간의 연결 정보) 등등의 정보를 모두 내포하고 있어야 합니다..
1. 애초에 제가 생각하기로는 각 block을 xml-like한 형태로 저장하고, 전체 diagram도 xml-like한 형태로 저장을 하는 것이었습니다.
diagram을 저장할 때, 여러 block들이 포함될 텐데, 그 때는 block들의 file name과 선 연결 정보 등을 xml 형태로 저장하는 것이었습니다.
--> 이 형태는 overhead가 클 것 같아서, 고민중입니다. 파일 저장후 추후에 block이나 다른 정보가 추가/삭제시에는 XML 라이브러리를 쓰면 되니까 편할 꺼 같긴 합니다.
2. 새 파일 포맷을 정해서, header와 data영역에 때려넣는 방법입니다.
이 때는 block 정보가 바뀐다던지 해서, 기존 정보가 변경될 경우 다시 저장하기가 곤란할 것 같구요.
(block 정보가 바뀔 때 해당 block size가 늘어날 수 있습니다. block의 경우 size가 정해지지 않고 유동적이라 보면 됩니다.)
설명이 잘 전달됐는지 모르겠는데, 질문을 하자면...
질문 1. 어떠한 방식이 더 효율적일지 모르겠네요. 위 둘 방식 중에... 다른 방식이 있는지도 궁금합니다.
질문 2. 실제 visio에서는 어떠한 방식을 쓰고 있는지 궁금하네요. 전체 diagram( vsd파일)과 stencil의 각 block을 어떻게 하는지...
아시는 분 있으시면 도움바랍니다. 단, 저는 stencil의 block이 고정적이 아니라, 재정의/변환이 가능합니다.
글이 긴데, 읽어주셔서 감사합니다.
댓글 달기