예. 다양한 사용을 위해 생성자를 통한 파일 생성이외에
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 에서 한번 열고 닫기 하고..
: 별도의 화일에 있는 함수에서는 화일을 열고 닫기를 하지 않는 방법이 있나요?
:
: 주변에 물어볼 사람이 전무 하므로 코드가 간단 하면, 자세히 알려 주시면 좋겠습니다.
:
: 미리 감사 드립니다.