블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2737)
Unity3D (817)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (58)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (53)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
04-26 00:00
반응형

'Programming > C++/CLI' 카테고리의 다른 글

cli::array<t>^<t>  (0) 2011.03.24
System.String → char * (marshal_context)  (2) 2010.12.20
Arrays in C++/CLI  (0) 2010.11.26
Native C++에서 Managed C++에 접근이 필요할 때  (0) 2010.11.09
C++/CLI Singleton  (0) 2010.10.22
Posted by blueasa
, |

종이천하

Link / 2010. 12. 20. 18:44
반응형

'Link' 카테고리의 다른 글

C# 배움터  (0) 2010.12.23
Download D3DX DLLs (d3dx9_xx.dll, d3dx10_xx.dll)  (0) 2010.12.23
Dot Net Perls  (0) 2010.11.08
CppCheck(소스 결함 예방 툴)  (0) 2010.10.06
C# 관련 블로그  (0) 2010.08.18
Posted by blueasa
, |

1. NiPick에서의 충돌 검사

일반적으로 충돌 처리를 NiPick을 이용해서 많이 합니다.  그런데 NiPick에는 심각한 문제가 있습니다.  그것은 거리와 상관없이 해당 방향에 있는 모든 오브젝트에 대해서 검사를 한다는 것이죠.

 

NiPick 충돌 검사 비용을 줄이기 위해서는 트라이앵글 충돌검사비용을 줄여주어야 합니다.  그렇게 하기 위해서는 경계구에서 거리가 먼경우(경계구의 중심점과 NiPick.Ray의 origin 위치사이의 거리에서 경계구의 반지름을 뺀 값)에는 아예 그 안에 들어가지 않게 하는 것입니다.  이렇게 하면 속도향상을 상당부분 줄 수 있습니다.

 

NiPick을 이용한 충돌은 기본적으로 카메라 충돌 검사, 서있는 위치 알아오기, 이동방향에 대한 충돌 등 다양하게 적용되겠죠.

 

2. Update 비용

Update 비용은 매우 심각한 편입니다.  이 비용을 줄이기 위해서는 씬그래프를 잘 구성해주어야 합니다.  움직이지 않는 오브젝트는 업데이트가 최초 1회만 실행하면 됩니다.  UpdateSelect, UpdateRigid 등도 모두 낭비라는 사실이죠.

 

그러면 어떻게 하면 될까요? 

 

모델링을 할 때, 노드 이름을 정할 때, 다음과 같은 규칙을 정합니다.  노드 이름에 특별한 기능이 들어가 있는 경우에는 @를 붙여봅니다.  그런다음, 1 = pick, 2 = animation 라고 규정을 하죠.

 

노드이름이 @12tree 라고 한다면, pick이 되면서 animation이 되는 노드입니다.  즉 이런 노드는 따로 보관을 합니다.  그런 후에 pick이 필요하면 pick만 모아둔 트리에서 pick을 합니다.  Update가 필요하면 animation만 모아둔 트리에서 합니다.  이렇게 하면 성능을 많이 향상시킬 수 있습니다.

 

3. 캐릭터

캐릭터에는 기본적으로 skin 애니메이션이 들어가있습니다.  캐릭터쪽을 향상시키기 위해서는 Update를 최소로 불러주는 것이 좋겠죠.  이 경우 UpdateRigid와 Update를 혼용해서 사용하면 유리합니다.  위치이동은 해주어야 하니까요.  거리와 시야각에 따라서 Update 안하거나, updateRigid와 Update의 횟수를 조절해주면 도움이 될 것으로 보입니다.

 

4. 컬링 & 렌더링

이 부분은 제가 테스트해본 역사가 없습니다만, 듀얼 프로세스 시스템에서는 컬링 프로세스와 렌더링 프로세스를 분리해준다면 괄목할만한 성능 향상이 이루어질 것이라 생각됩니다.

 

5. 컬러스페이스

처음에 제작하는 사람중에서 가장 성능향상에 걸림돌이 되는 것은 컬러스페이스 문제입니다.  DDS를 사용하면 컬러스페이스 문제를 줄여줄 수 있습니다.  그러나 호환성 부분은 당연히 떨어집니다.  컬러스페이스가 서로 다른 경우 게임브리오는 텍스처를 생성할 때마다, 컬러스페이스를 변환합니다.  NiDevImgConverter가 이역할을 하고 있습니다.  컬러스페이스는 픽셀단위로 작업되기 때문에 매우 느립니다.

 

6. 그룹핑

같은 재질, 같은 텍스처를 사용한다면, 폴리곤을 합치는 것이 일반적으로 유리합니다.  그러나 폴리곤의 덩치가 커지면 그려지는 횟수가 많아지므로 이에 대해서 잘 판단해야 합니다.  이에 대해서는 게임브리오 문서에도 나와있습니다.  culling과 clipping의 싸움을 적절하게 조화해주어야 합니다.

 

7. 캐싱

거대존을 사용하는 경우에는 모델링 데이터 및 텍스처 데이터의 캐싱이 들어가게 됩니다.  일반적으로 캐싱할 관리자를 프로그램한 후에 필요한 데이터가 있는 경우 그 데이터를 Clone 함수를 이용해서 가져오게 됩니다.  그런데 여기서 문제가 있습니다.  게임브리오는 노드 트리 구조에서 보았을 때, 인스턴스 복사가 안 되고, 노드 트리 자체를 모두 복사하게 됩니다.  노드들이 많은 경우에는 메모리 낭비가 심하게 되어서 전체적으로 성능이 떨어지게 됩니다.  예를 들어서 성(castle) 오브젝트가 있다고 한다면, 성 오브젝트는 무수히 많은 노드들로 이루어질겁니다.  그런데 사용하는 것은 오직 한번뿐인데 Clone을 이용해서 가져온다면.. 두개의 복사본이 있기 때문에 그만큼 메모리 낭비가 심해집니다.

그래서 오브젝트 캐싱을 할 때에는 참조횟수를 지정해서 처음 참조가 되는 경우에는 자신의 포인터를 바로 넘겨주고, 두번째부터는 clone을 해주는 것이 좋습니다.



출처 : http://cafe.naver.com/dxgameprogramming/249

반응형
Posted by blueasa
, |

 

한빛네트워크에는 양질의 칼럼들이 많이 있습니다.

다음은 한동훈님의 칼럼 중에 Advanced C#을 주제로 작성된 칼럼들의 링크입니다.

 

Advanced C# 1. UML
http://network.hanbitbook.co.kr/view.php?bi_id=589

 

Advanced C# 2. 인터페이스
http://network.hanbitbook.co.kr/view.php?bi_id=590

 

Advanced C# 3. 디자인 패턴(DP)과 Simple Factory Pattern
http://network.hanbitbook.co.kr/view.php?bi_id=593

 

Advanced C# 4. DP - Monostate, Utility, Singleton Pattern
http://network.hanbitbook.co.kr/view.php?bi_id=595

 

Advanced C# 5. DP - Factory Method
http://network.hanbitbook.co.kr/view.php?bi_id=596

 

Advanced C# 6. DP - Abstract Factory
http://network.hanbitbook.co.kr/view.php?bi_id=594

 

Advanced C# 7. DP - Builder
http://network.hanbitbook.co.kr/view.php?bi_id=600

 

Advanced C# 8. DP - Prototype 패턴
http://network.hanbitbook.co.kr/view.php?bi_id=601

 

Advanced C# 9. 알고리즘 분석(Algorithm Analysis)
http://network.hanbitbook.co.kr/view.php?bi_id=602

 

Advanced C# 10. 분할의 아름다움 - 재귀와 비재귀
http://network.hanbitbook.co.kr/view.php?bi_id=603

 

Advanced C# 11. 방정식, 미적분법 그리고 delegate
http://network.hanbitbook.co.kr/view.php?bi_id=614

반응형
Posted by blueasa
, |
[Korean]

1) CheckBox 생성

2) CheckBox - 속성 - Appearance 값을 Normal -> Button으로 변경

3) 사이즈 조절 하려면 CheckBox - 속성 - AutoSize = false 로 변경



[English]

1) Create CheckBox

2) CheckBox - Attribute(or Preference?) - Appearance Value : Normal -> Button

3) Adjust Size : CheckBox - Attribute(or Preference?) - AutoSize Value : false

반응형

'Programming > C#' 카테고리의 다른 글

sendmessage in C#  (1) 2010.12.27
C# SendMessage Keypress  (1) 2010.12.26
Microsoft Win32 to Microsoft .NET Framework API Map  (0) 2010.12.10
경로명,확장자 분리 함수 등등  (0) 2010.12.09
C# 디폴트 파라미터 따라하기  (0) 2010.12.03
Posted by blueasa
, |
반응형
Posted by blueasa
, |

string str = @"E:\JAVA\Sample\X509Test\minMain.java.bak";

            System.Diagnostics.Debug.WriteLine("경로명:" + System.IO.Path.GetDirectoryName(str));
            System.Diagnostics.Debug.WriteLine("확장자:" + System.IO.Path.GetExtension(str));
            System.Diagnostics.Debug.WriteLine("파일명:" + System.IO.Path.GetFileName(str));

            System.Diagnostics.Debug.WriteLine("분리자:" + System.IO.Path.AltDirectorySeparatorChar);
            System.Diagnostics.Debug.WriteLine("확장자유무:" + System.IO.Path.HasExtension(str).ToString());
            System.Diagnostics.Debug.WriteLine("순파일명:" + System.IO.Path.GetFileNameWithoutExtension(str));
            System.Diagnostics.Debug.WriteLine("root:" + System.IO.Path.GetPathRoot(str));
            System.Diagnostics.Debug.WriteLine("랜덤파일명:" + System.IO.Path.GetRandomFileName());
            System.Diagnostics.Debug.WriteLine("임시파일:" + System.IO.Path.GetTempFileName());
            System.Diagnostics.Debug.WriteLine("임시경로:" + System.IO.Path.GetTempPath());

 

            //---------------------------------------------------------------------------
            int n= str.LastIndexOf(@"\");
            System.Diagnostics.Debug.WriteLine("파일명:" + str.Substring(0, n));
            System.Diagnostics.Debug.WriteLine("경로명:" + str.Substring(n + 1, str.Length - n - 1));

반응형
Posted by blueasa
, |
예제 XML 파일 
1.<!--?xml version="1.0" ?-->     <myapp>        <welcome>Welcome to MyApp</welcome>        <farewell>Thank you for using MyApp</farewell>              <windows>         <windowname="MainFrame" w="400" h="250"y="15" x="5">       </window></windows>       <connectiontimeout="123.456000"ip="192.168.0.1">       </connection></myapp>

파일에서 읽을때
1.TiXmlDocument document;        document.LoadFile(_File_Name_);

문자열로 읽을때
1.TiXmlDocument document;        document.Parse(szXML);

Node와 Element를 가져올때
1.TiXmlElement* pRoot = document.FirstChildElement("MyApp");        if( NULL == pRoot ) return FALSE;        char* szRootName = pRoot->Value(); //Value()를 사용하면 Node의 이름을 알수있다

각 태그의 속성값 읽어올때 
여기에선 위예제의 windows 태그의 속성을 읽어본다.
1.TiXmlElement* pElement = pRoot->FirstChildElement("Windows");        char* szName = pElement->Attribute("name");         char* szX = pElement->->Attribute("x");         char* szY = pElement->->Attribute("y");         char* szW = pElement->->Attribute("w");         char* szH = pElement->->Attribute("h");

정수형으로 읽고 싶으면~
1.int x;pElement->Attribute("x", &x);

모든 속성값을 한번에 읽어올때
1.TiXmlElement* pElement = pRoot->FirstChildElement("Windows");          TiXmlAttribute* attrib = pElement ->FirstAttribute(); //pElement의 속성을 받아온다.     while(attrib)   {           const char* szAttribute = attrib->Value();             attrib = attrib->Next();         }

Child Node를 순회 할때
1.TiXmlElement* pRoot = doc.RootElement();        TiXmlElement* pChild;        for(pChild = pRoot ->FirstChildElement() ; pChild != 0 ; pChild = pChild->NextSiblingElement())        { //Node를 돌면서..        }

Save XML 
Xml 형식선언할때
1.TiXmlDocument doc;   TiXmlElement* msg; TiXmlDeclaration* decl = newTiXmlDeclaration( "1.0""""" );   doc.LinkEndChild( decl );      //결과값 : <!--?xml version="1.0" ?-->

서브 노드를 추가할때
1.TiXmlElement * root = new TiXmlElement( "MyApp" );   doc.LinkEndChild( root );

주석문장을 추가할때
1.TiXmlComment * comment = new TiXmlComment();comment->SetValue(" Settings for MyApp " );  root->LinkEndChild( comment );

Message 서브노드와 하위 노드및 데이터를 추가할때
1.TiXmlElement * msgs = new TiXmlElement( "Messages" );       root->LinkEndChild( msgs );       msg = new TiXmlElement( "Welcome");       msg->LinkEndChild( new TiXmlText( "Welcome to MyApp"));       msgs->LinkEndChild( msg );       msg = new TiXmlElement("Farewell" );       msg->LinkEndChild( new TiXmlText( "Thank you for using MyApp" ));       msgs->LinkEndChild( msg );

노드를 추가하고 Attribute를 설정할때 레벨을 맞추기 위해서 root의 하위로 추가 한것을 주의 깊게 봐야 한다.
1.TiXmlElement * windows = new TiXmlElement( "Windows" );       root->LinkEndChild( windows );       TiXmlElement * window;     window =new TiXmlElement( "Window" );       windows->LinkEndChild( window );       window->SetAttribute("name""MainFrame");     window->SetAttribute("x", 5);     window->SetAttribute("y", 15);     window->SetAttribute("w", 400);     window->SetAttribute("h", 250);

Double 값 (소수점 값) 을 설정할때
1.TiXmlElement * cxn = new TiXmlElement( "Connection" );       root->LinkEndChild( cxn );       cxn->SetAttribute("ip","192.168.0.1");     cxn->SetDoubleAttribute("timeout", 123.456); // floating point attrib

Xml파일로 저장할때
1.// 파일로 저장      doc.SaveFile("text.xml");     //문자열로..     TiXmlPrinter printer;     printer.SetStreamPrinting();     Doc.Accept( &printer );      char* pAA = printer.CStr();                    // char* 를 반환한다.     std::string str = printer.Str();                  // std::string으로 반환한다.

반응형

'Programming > TinyXML' 카테고리의 다른 글

TinyXML Read  (2) 2010.12.08
TinyXML Write  (0) 2010.12.08
XML introduce(XML 문법 설명)  (0) 2010.04.27
Tiny XML 링크  (0) 2010.04.27
Posted by blueasa
, |

TinyXML Read

Programming/TinyXML / 2010. 12. 8. 14:43

C++용 XML 라이브러리가 몇가지 있다. MSXML 라이브러리, TinyXML 라이브러리가 있다.
작고 빠르다고 알려진 TinyXML 라비브러리를 알아 본다.

내가 사용한 버전은 TinyXML 2.5.3 버전이다. xmltet.cpp는 메모장에서 파일 인코딩을
UTF-8로 열고 유니코드 인코딩으로 재 저장하여 문자가 깨지지 않도록 한다.

TinyXML의 NodeType

TinyXml의 NodeType은 XML의 노드 타입과 대부분 비슷 하다.
XML 서적이나 문서를 보면 주석, 속성, TEXT, Element들의 최소단위는 노드이다. 
엘리먼트와 노드를 혼동하지 않도록 한다. 
TinyXML에서는 TiXmlElement노드가 TiXmlNode를 상속하고 있다.  

COMMENT 노드: 주석을 표현 하는 노드

ELEMENT 노드: 엘리먼트를 표현 하는 노이다.
              Test.xml에서는 root, food, name, country가 엘리먼트이다.
              (test.xml 파일은 아래에 나온다.)

TEXT 노드: 트리 구조상 최말단 노드로 문자 데이터를 표현하는 노드이다.

Attribute node: TinyXml 노드 타입에는 존재하지 않지만 TinyXml에서는 속성을 얻어                 올수 있는 메소드를 제공한다.

나머지 node 타입은 문서를 참고한다.

 

헤더 파일 포함

TinyXML 내부에서 자체 string 클래스 대신 std::string 클래스를 사용 할려면,
TIXML_USE_STL을 선언한다.
STL 사용에 필요한 헤더를 포함 시킨다.

#define TIXML_USE_STL    // TinyXML의 string대신 std::string을 사용할 경우.

#include “tinyxml.h”

 

#ifdef TIXML_USE_STL

    #include <iostream>

    #include <sstream>

    using namespace std;

#else

    #include <stdio.h>

#endif

 

라이브러리 링크

TIXML_USE_STL에 따라 라이브러리 링크를 다르게 설정한다.

//lib 파일 링크

 

#ifdef TIXML_USE_STL

 

#ifdef _DEBUG

#pragma comment(lib, "tinyxmld_STL")

#else

#pragma comment(lib, "tinyxml_STL")

#endif

 

#else

 

#ifdef _DEBUG

#pragma comment(lib, "tinyxmld")

#else

#pragma comment(lib, "tinyxml")

#endif

 

#endif

test.xml

읽을려는 XML 파일이다.

<?xml version="1.0" encoding="euc-kr"?>

<root>

  <!--각국의 대표 음식들이다.-->

  <food num="1">

      <name>김치</name>

      <country>대한민국</country>

  </food>

  <food num="2">

    <name>햄버그</name>

    <country>미국</country>

  </food> 

</root>

파일을 통해 읽을려면

    TiXmlDocument doc;

    doc.LoadFile("test.xml");

문자열을 통해 읽을려면

    TiXmlDocument doc;

    doc.Parse(szXML);

root 엘리먼트 노드를 읽는다.

TiXmlElement* rootElement = doc.FirstChildElement( "root" );

"root"의 자식 "food" 엘리먼트 노드를 읽는다.

    TiXmlElement*  element = doc.FirstChildElement( "root" )->FirstChildElement("food");

"food" 엘리먼트 노드를 반복해서 출력 한다.

    1     while( element )

    2     {

    3         //Value()는 현재 Node의 문자열을 넘겨준다.

    4         //GetText()는 현재 Text 타입 Node의 문자열을 넘겨 준다.

    5         //element->FirstChildElement()->Value()는 "name"을 넘겨준다.

    6         const char* num = element->Attribute( "num" );

    7         std::cout << "num Attribute: " << num << std::endl;

    8         std::cout << "name: " << element->FirstChildElement("name")->GetText() << std::endl;

    9         std::cout << "country: " << element->FirstChildElement("country")->GetText() << std::endl;

   10         element = element->NextSiblingElement( "food" );

   11     }

1: "food" 엘리먼트가 있을 때 까지 반복한다.

6: "num" 속성의 문자열을 읽어 온다.

속성을 정수로 읽을려면 다음과 같이 한다.
TiXmlAttribute* attr = element->FirstAttribute();
int n = attr->IntValue();

7: "name" 엘리먼트의 값을 읽는다.

8: "country" 엘리먼트의 값을 읽는다.

10: 다음 "food" 엘리먼트로 이동 한다.

 

XML 전체 파싱

ShowXML()은 XML을 파싱하여 보여주는 함수이다.
코드 설명은 생략....

void ShowXml(TiXmlNode *pNode)

{

       if(pNode)

       {

              switch(pNode->Type())

              {

              case TiXmlNode::COMMENT:

                    std::cout << "COMMENT: " << pNode->Value() << std::endl;

                    break;

              case TiXmlNode::DECLARATION:

                    std::cout << "DECLARATION: " << std::endl;

                    break;

 

              case TiXmlNode::ELEMENT:

                  {

                      std::cout << "ELEMENT: [" << pNode->ToElement()->Value() << "]" << std::endl;

                      TiXmlAttribute *pAttr = pNode->ToElement()->FirstAttribute();

                      while(pAttr)

                      {

                         std::cout << pAttr->Name() << "=\"" << pAttr->Value() << "\"" << std::endl;

                         pAttr = pAttr->Next();

                      }

                  }

                  break;

 

              case TiXmlNode::TEXT:

                   TiXmlText* pText = pNode->ToText();

                   if(pText)

                       std::cout << "TEXT:  " << pText->Value() << std::endl;

                   break;

              }

 

              for(TiXmlNode *pNext = pNode->FirstChild(); pNext; pNext = pNext->NextSibling())                     ShowXml(pNext);

       }

}

소스

tinyxml.zip

참조:

http://hanburn.tistory.com/7

http://hanburn.tistory.com/8


출처 : http://dolphin.ivyro.net/file/algorithm/etc/tinyXml_read.html

반응형

'Programming > TinyXML' 카테고리의 다른 글

TinyXml 사용법 요약  (0) 2010.12.08
TinyXML Write  (0) 2010.12.08
XML introduce(XML 문법 설명)  (0) 2010.04.27
Tiny XML 링크  (0) 2010.04.27
Posted by blueasa
, |

TinyXML Write

Programming/TinyXML / 2010. 12. 8. 14:36

TinyXML Read의 test.xml과 같은 포맷으로 XML 파일을 저장해 보자.
저장될 파일은 다음과 같다.

test_write.xml

<?xml version="1.0" encoding="euc-kr" ?>

<root>

    <!--각국의 대표 음식들이다.-->

    <food num="1">

        <name>김치</name>

        <country>대한민국</country>

    </food>

</root>

XML 형식 선언

TiXmlDocument doc; 

TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "euc-kr", "" ); 

doc.LinkEndChild( decl );

우리나라 문자셋의 1.0 버전이 만들어 진다.

서브 노드 추가

TiXmlElement * root = new TiXmlElement( "root" ); 

doc.LinkEndChild( root );

"root" 엘리먼트를 추가한다. TinyXML에서 노드를 추가 할 때, new로 생성한 엘리먼트는
내부에서 자동으로 삭제 되기 때문에 해제 할 필요가 없다.

주석 추가

TiXmlComment * comment = new TiXmlComment();

comment->SetValue( "각국의 대표 음식들이다." ); 

root->LinkEndChild( comment );

root의 자식으로 "food" 서브 노드 추가

TiXmlElement *food = new TiXmlElement( "food" ); 

root->LinkEndChild( food );

root의 자식이 되는 "food" 서브 노드를 추가한다.

food의 Attribute로 "num" 추가

food->SetAttribute("num", 1);   //food->SetAttribute("num", "1")와 동일

food->SetAttribute( "num", "1" )도 동일한 결과이다.

food의 자식으로 name 서브 노드와 값 추가

TiXmlElement *name = new TiXmlElement( "name" ); 

food->LinkEndChild( name ); 

name->LinkEndChild( new TiXmlText( "김치" ));

food의 자식 노드로 "name"을 추가하고 값은 "김치"이다.

food의 자식 노드로 country 서브 노드와 값 추가

TiXmlElement *country = new TiXmlElement( "country" ); 

food->LinkEndChild( country ); 

country->LinkEndChild( new TiXmlText( "대한민국" ));

food의 자식 노드로 "country"를 추가하고 값은 "대한민국"이다.

저장 하기

doc.SaveFile("test_write.xml");

SaveFile()을 통해 원하는 파일명으로 값을 저장한다.

전체 소스

void WriteXml()

{

    //형식 선언

    TiXmlDocument doc; 

    TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "euc-kr", "" ); 

    doc.LinkEndChild( decl );

 

    //서브 노드 추가

    TiXmlElement * root = new TiXmlElement( "root" ); 

    doc.LinkEndChild( root ); 

 

    //주석 추가

    TiXmlComment * comment = new TiXmlComment();

    comment->SetValue( "각국의 대표 음식들이다." ); 

    root->LinkEndChild( comment ); 

 

    //root의 자식으로 food 서브 노드 추가

    TiXmlElement *food = new TiXmlElement( "food" ); 

    root->LinkEndChild( food ); 

 

    //food의 Attribute로 "num" 추가

    food->SetAttribute("num", 1);   //food->SetAttribute("num", "1")와 동일

 

    //food의 자식으로 name 서브 노드와 값 추가

    TiXmlElement *name = new TiXmlElement( "name" ); 

    food->LinkEndChild( name ); 

    name->LinkEndChild( new TiXmlText( "김치" ));

 

    //food의 자식으로 country 서브 노드와 값 추가

    TiXmlElement *country = new TiXmlElement( "country" ); 

    food->LinkEndChild( country ); 

    country->LinkEndChild( new TiXmlText( "대한민국" ));

 

    doc.SaveFile("test_write.xml");

}

콘솔 창으로 XML 파일 보여주기

void PrintXml()

{

    TiXmlDocument doc( "test.xml" );

    doc.LoadFile();

 

    //문자열로..

    TiXmlPrinter printer;

    printer.SetStreamPrinting();

    doc.Accept( &printer );

    const char* pStr = printer.CStr();        // char* 를 반환한다.

    printf( pStr );

#ifdef  TIXML_USE_STL

    const std::string str = printer.Str();    // std::string으로 반환한다.

#endif

}

XML 파일을 콘솔 창으로 보여준다...

소스:

tinyxml.zip

참조:

http://hanburn.tistory.com/7

http://hanburn.tistory.com/8


출처 : http://dolphin.ivyro.net/file/algorithm/etc/tinyXml_write.html

http://dolphin.ivyro.net/file/algorithm/etc/tinyXml_write.html

반응형

'Programming > TinyXML' 카테고리의 다른 글

TinyXml 사용법 요약  (0) 2010.12.08
TinyXML Read  (2) 2010.12.08
XML introduce(XML 문법 설명)  (0) 2010.04.27
Tiny XML 링크  (0) 2010.04.27
Posted by blueasa
, |