알려주신 방법대로 하니 속도도 두배는 빨라진듯 합니다.
감사 합니다.
지금 약 3천 라인쯤 되는데,, 버그 잡는게 장난이 아니네요.
다음엔 class를 고려해야 할듯 한데, class 를 어떻게 설계해야 하는지 몰라서
마구 비효율적인 방법으로 구성 하였습니다.
감사 합니다.
Nibble 님이 쓰신 글 :
: 예. 다양한 사용을 위해 생성자를 통한 파일 생성이외에
: open 함수를 지원하고 있으니까요.
:
: ofstream To_Dxf;
:
: void DxfBegin()
: {
: To_Dxf.open(AsDxfSaveFileName.c_str(), ios::out);
: To_Dxf << 0 << endl;
: To_Dxf << "SECTION" << endl;
: To_Dxf << 2 << endl;
: To_Dxf << "ENTITIES" << endl;
: } // 열기만 합니다.
:
: void DxfEnd()
: {
: To_Dxf << 0 << endl;
: To_Dxf << "ENDSEC" << endl;
: To_Dxf << 0 << endl;
: To_Dxf << "EOF";
: To_Dxf.close();
: } // 닫기만 하죠.
:
: void DxfCircle(double radius, double x, double y)
: {
: To_Dxf << 0 << endl;
: To_Dxf << "CIRCLE" << endl;
: To_Dxf << 8 << endl;
: To_Dxf << 0 << endl; // Layer number (default layer in autocad)
: To_Dxf << 10 << endl; // XYZ is the Center point of circle
: To_Dxf << x << endl; // X in UCS (User Coordinate System)coordinates
: To_Dxf << 20 << endl;
: To_Dxf << y << endl; // Y in UCS (User Coordinate System)coordinates
: To_Dxf << 30 << endl;
: To_Dxf << 0.0 << endl; // Z in UCS (User Coordinate System)coordinates
: To_Dxf << 40 << endl;
: To_Dxf << radius << endl; // radius of circle
: }
:
: main()
: {
: DxfBegin();
: DxfCircle(...);
: DxfEnd();
: }
:
: 이런식이겠죠?
: 말씀하신것처럼 파일을 열고 닫는것은 cost가 큽니다.
: 클래스로 만드는게 보기좋겠지만 서도... 그럼.
:
: 뽀뽀중 님이 쓰신 글 :
: : 간단하게 dxf (캐드 도면 화일)을 만들 었습니다.
: : 라인, 폴리라인, 원, 글자등의 요소를 함수로 만들어 dxf 코드를 출력 하게 하였습니다
: : 그런데, 각 함수 마다, 화일을 open, close를 하게 하였는데,
: : 출력 하는 개체들이 많아지니, 프로그램이 무한정 느려 지네요.
: :
: : 아마도 함수 호출 마다 화일을 open, close 해서 그런듯 한데..
: :
: : ofstream 을 한번에 열고 닫게 할수가 있나요??
: :
: : =========아래와 같이 코딩을 하였습니다.============
: : main.cpp
: : DxfBegin() ;
: : DxfCircle(1.5, 10.2, 50.2);
: : DxfEnd()
: :
: : 별도의 DxfWrite.cpp 화일 입니다.
: :
: :
: : void DxfBegin() {
: : // Creation of an output stream object in text mode.
: : // Header section of every dxf file.
: : ofstream To_Dxf(AsDxfSaveFileName.c_str(), ios::out);
: :
: : To_Dxf << 0 << endl;
: : To_Dxf << "SECTION" << endl;
: : To_Dxf << 2 << endl;
: : To_Dxf << "ENTITIES" << endl;
: :
: : To_Dxf.close();
: : }
: :
: : void DxfEnd() {
: : // Creation of an output stream objet in text mode.
: : // end of sequence objects of dxf file.
: : ofstream To_Dxf(AsDxfSaveFileName.c_str(), ios::app);
: :
: : To_Dxf << 0 << endl;
: : To_Dxf << "ENDSEC" << endl;
: : To_Dxf << 0 << endl;
: : To_Dxf << "EOF";
: :
: : To_Dxf.close();
: : }
: :
: : void DxfCircle(double radius, double x, double y) {
: : // Propeties of a circle not bound in any AutoCAd version
: : // In AutoCAD 2000 we can have more less 4000 lines of code here.
: :
: : // Creation of an output stream objet in text mode.
: :
: : ofstream To_Dxf(AsDxfSaveFileName.c_str(), ios::app);
: :
: : // Draw the circle
: : To_Dxf << 0 << endl;
: : To_Dxf << "CIRCLE" << endl;
: : To_Dxf << 8 << endl;
: : To_Dxf << 0 << endl; // Layer number (default layer in autocad)
: : To_Dxf << 10 << endl; // XYZ is the Center point of circle
: : To_Dxf << x << endl; // X in UCS (User Coordinate System)coordinates
: : To_Dxf << 20 << endl;
: : To_Dxf << y << endl; // Y in UCS (User Coordinate System)coordinates
: : To_Dxf << 30 << endl;
: : To_Dxf << 0.0 << endl; // Z in UCS (User Coordinate System)coordinates
: : To_Dxf << 40 << endl;
: : To_Dxf << radius << endl; // radius of circle
: :
: : To_Dxf.close();
: :
: : }
: :
: :
: : 여기서
: :
: : ofstream To_Dxf(AsDxfSaveFileName.c_str(), ios::app);
: :
: : To_Dxf.close();
: : 를 main.cpp 에서 한번 열고 닫기 하고..
: : 별도의 화일에 있는 함수에서는 화일을 열고 닫기를 하지 않는 방법이 있나요?
: :
: : 주변에 물어볼 사람이 전무 하므로 코드가 간단 하면, 자세히 알려 주시면 좋겠습니다.
: :
: : 미리 감사 드립니다.