SceneTreeDlg.cpp
Upload User: kairuinn
Upload Date: 2009-02-07
Package Size: 2922k
Code Size: 18k
Category:

Graph program

Development Platform:

Visual C++

  1. // SceneTreeDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "..//Solidgraph.h"
  5. #include "SceneTreeDlg.h"
  6. #include "..//Drawer.h"
  7. #include "..//SolidgraphView.h"
  8. typedef enum
  9. {
  10. NDT_NONE,
  11. NDT_OBJECT,
  12. NDT_WORK_PLANE,
  13. NDT_LAYER
  14. } NODE_DATA_TYPE;
  15. class CNodeData
  16. {
  17. public:
  18. NODE_DATA_TYPE  m_type;
  19. CNodeData() {m_type = NDT_NONE;};
  20. virtual ~CNodeData() {};
  21. };
  22. class CObjectNodeData : public CNodeData
  23. {
  24. public:
  25. sgCObject**  m_object;
  26. CObjectNodeData(sgCObject** ooo) {m_type = NDT_OBJECT;m_object=ooo;};
  27. virtual ~CObjectNodeData() {};
  28. };
  29. class CWorkPlaneNodeData : public CNodeData
  30. {
  31. public:
  32. unsigned int  m_wp_number;
  33. CWorkPlaneNodeData(unsigned int nn) {m_type = NDT_WORK_PLANE;m_wp_number=nn;};
  34. virtual ~CWorkPlaneNodeData() {};
  35. };
  36. class CLayerNodeData : public CNodeData
  37. {
  38. public:
  39. unsigned int  m_l_number;
  40. CLayerNodeData(unsigned int nn) {m_type = NDT_LAYER;m_l_number=nn;};
  41. virtual ~CLayerNodeData() {};
  42. };
  43. CGlobalTree::CGlobalTree():CBirch()
  44. {
  45. CString resStr;
  46. resStr.LoadString(IDS_WORK_PLANES);
  47. m_work_planes_node = InsertChild( HTOPNODE, resStr );
  48. resStr.LoadString(IDS_LAYERS);
  49. m_layers_node = InsertChild( HTOPNODE, resStr );
  50. resStr.LoadString(IDS_OBJCTS);
  51. m_objects_node = InsertChild( HTOPNODE, resStr );
  52. m_objects_node->bOpen = true;
  53. m_editing_regime = false;
  54. m_editing_object_node = NULL;
  55. m_wnd   =  NULL;
  56. /* m_vis_obj_bitmap = new CBitmap32();
  57. m_vis_obj_bitmap->LoadBitmap(IDB_VISIBLE_OBJ_TC);
  58. m_invis_obj_bitmap= new CBitmap32();
  59. m_invis_obj_bitmap->LoadBitmap(IDB_INVISIBLE_OBJ_TC);*/
  60. m_vis_obj_bitmap = new CBitmap32();
  61. m_vis_obj_bitmap->LoadBitmap(IDB_VISIBLE_OBJ_TC);
  62. m_invis_obj_bitmap= new CBitmap32();
  63. m_invis_obj_bitmap->LoadBitmap(IDB_INVISIBLE_OBJ_TC);
  64. m_radio_check_bmp= new CBitmap32();
  65. m_radio_check_bmp->LoadBitmap(IDB_RADIO_CHECK_BMP);
  66. m_radio_uncheck_bmp= new CBitmap32();
  67. m_radio_uncheck_bmp->LoadBitmap(IDB_RADIO_UNCHECK_BMP);
  68. m_unck_obj_bmp = new CBitmap32();
  69. m_unck_obj_bmp->LoadBitmap(IDB_UNCK_OBJ_BMP);
  70. m_objects_bmp = new CBitmap32();
  71. m_objects_bmp->LoadBitmap(IDB_OBJECTS_BMP);
  72. m_objects_node->item_bitmaps.push_back(m_objects_bmp);
  73. m_layers_bmp = new CBitmap32();
  74. m_layers_bmp->LoadBitmap(IDB_LAYERS_BMP);
  75. m_layers_node->item_bitmaps.push_back(m_layers_bmp);
  76. m_wp_bmp = new CBitmap32();
  77. m_wp_bmp->LoadBitmap(IDB_WP_BMP);
  78. m_work_planes_node->item_bitmaps.push_back(m_wp_bmp);
  79. resStr.LoadString(IDS_XY_WP);
  80. HTREENODE tmpNode  = InsertChild( m_work_planes_node, resStr );
  81. m_wp_nodes.push_back(tmpNode);
  82. tmpNode->userData = new CWorkPlaneNodeData(0);
  83. tmpNode->bAutoDeleteUserData = true;
  84. m_wp_bmps[0] = new CBitmap32();
  85. m_wp_bmps[0]->LoadBitmap(IDB_XY_WP_BMP);
  86. tmpNode->item_bitmaps.push_back(m_radio_check_bmp);
  87. tmpNode->item_bitmaps.push_back(m_vis_obj_bitmap);
  88. tmpNode->item_bitmaps.push_back(m_wp_bmps[0]);
  89. CString NormStr;
  90. NormStr.LoadString(IDS_NORMAL);
  91. HTREENODE tmpNode2 = InsertChild(tmpNode,NormStr);
  92. InsertChild(tmpNode2,"X = 0.0000");
  93. InsertChild(tmpNode2,"Y = 0.0000");
  94. InsertChild(tmpNode2,"Z = 1.0000");
  95. tmpNode = InsertChild(tmpNode,"D = 0.0000");
  96. //tmpNode->bEditable = true;
  97. resStr.LoadString(IDS_XZ_WP);
  98. tmpNode = InsertChild( m_work_planes_node, resStr );
  99. m_wp_nodes.push_back(tmpNode);
  100. tmpNode->userData = new CWorkPlaneNodeData(1);
  101. tmpNode->bAutoDeleteUserData = true;
  102. m_wp_bmps[1] = new CBitmap32();
  103. m_wp_bmps[1]->LoadBitmap(IDB_XZ_WP_BMP);
  104. tmpNode->item_bitmaps.push_back(m_radio_uncheck_bmp);
  105. tmpNode->item_bitmaps.push_back(m_invis_obj_bitmap);
  106. tmpNode->item_bitmaps.push_back(m_wp_bmps[1]);
  107. tmpNode2 = InsertChild(tmpNode,NormStr);
  108. InsertChild(tmpNode2,"X = 0.0000");
  109. InsertChild(tmpNode2,"Y = 1.0000");
  110. InsertChild(tmpNode2,"Z = 0.0000");
  111. tmpNode = InsertChild(tmpNode,"D = 0.0000");
  112. //tmpNode->bEditable = true;
  113. resStr.LoadString(IDS_YZ_WP);
  114. tmpNode = InsertChild( m_work_planes_node, resStr );
  115. m_wp_nodes.push_back(tmpNode);
  116. tmpNode->userData = new CWorkPlaneNodeData(2);
  117. tmpNode->bAutoDeleteUserData = true;
  118. m_wp_bmps[2] = new CBitmap32();
  119. m_wp_bmps[2]->LoadBitmap(IDB_YZ_WP_BMP);
  120. tmpNode->item_bitmaps.push_back(m_radio_uncheck_bmp);
  121. tmpNode->item_bitmaps.push_back(m_invis_obj_bitmap);
  122. tmpNode->item_bitmaps.push_back(m_wp_bmps[2]);
  123. tmpNode2 = InsertChild(tmpNode,NormStr);
  124. InsertChild(tmpNode2,"X = 1.0000");
  125. InsertChild(tmpNode2,"Y = 0.0000");
  126. InsertChild(tmpNode2,"Z = 0.0000");
  127. tmpNode = InsertChild(tmpNode,"D = 0.0000");
  128. //tmpNode->bEditable = true;
  129. m_work_planes_node->bOpen = true;
  130. }
  131. CGlobalTree::~CGlobalTree() 
  132. {
  133. delete m_vis_obj_bitmap ;
  134. delete m_invis_obj_bitmap;
  135. delete m_objects_bmp;
  136. delete m_layers_bmp;
  137. delete m_wp_bmp;
  138. delete m_radio_check_bmp;
  139. delete m_radio_uncheck_bmp;
  140. delete m_wp_bmps[0];
  141. delete m_wp_bmps[1];
  142. delete m_wp_bmps[2];
  143. delete m_unck_obj_bmp;
  144. }
  145. void   CGlobalTree::SetIconsToNode(HTREENODE nd)
  146. {
  147. if (nd->userData==NULL)
  148. return;
  149. CNodeData* nD = static_cast<CNodeData*>(nd->userData);
  150. if (nD->m_type!=NDT_OBJECT)
  151. return;
  152. CObjectNodeData* onD = reinterpret_cast<CObjectNodeData*>(nD);
  153. sgCObject* obb = *(onD->m_object);
  154. if (m_vis_obj_bitmap==NULL || m_invis_obj_bitmap==NULL)
  155. {
  156. APP_SWITCH_RESOURCE
  157. if (m_vis_obj_bitmap==NULL)
  158. {
  159. m_vis_obj_bitmap = new CBitmap32();
  160. m_vis_obj_bitmap->LoadBitmap(IDB_VISIBLE_OBJ_TC);
  161. }
  162. if (m_invis_obj_bitmap==NULL)
  163. {
  164. m_invis_obj_bitmap= new CBitmap32();
  165. m_invis_obj_bitmap->LoadBitmap(IDB_INVISIBLE_OBJ_TC);
  166. }
  167. }
  168. if (theApp.m_main_pluginer && obb)
  169. {
  170. std::string obID(obb->GetUserGeometryID());
  171. std::map<std::string, OBJ_SUPPORTER>::const_iterator itr = 
  172. theApp.m_main_pluginer->m_objects_supporter.find(obID);
  173. if (itr!=theApp.m_main_pluginer->m_objects_supporter.end())
  174. {
  175. if ((*itr).second.object_icon)
  176. {
  177. ((CTreeNode*)nd)->item_bitmaps.push_back((*itr).second.object_icon);
  178. }
  179. }
  180. else
  181. {
  182. ((CTreeNode*)nd)->item_bitmaps.push_back(m_unck_obj_bmp);
  183. }
  184. CBitmap32* bbb = NULL;
  185. if (obb->GetAttribute(SG_OA_DRAW_STATE)&SG_DS_HIDE)
  186. bbb = m_invis_obj_bitmap;
  187. else
  188. bbb = m_vis_obj_bitmap;
  189. ((CTreeNode*)nd)->item_bitmaps.push_back(bbb);
  190. }
  191. }
  192. ISceneTreeControl::TREENODEHANDLE  CGlobalTree::AddNode(sgCObject** obj, 
  193.   ISceneTreeControl::TREENODEHANDLE par)
  194. {
  195. HTREENODE  res = NULL;
  196. if (m_editing_regime && m_editing_object_node)
  197. {
  198. res = InsertSibling(m_editing_object_node,(*obj)?((*obj)->GetName()):("Object") );
  199. m_editing_regime = false;
  200. m_editing_object_node = NULL;
  201. }
  202. else
  203. res = InsertChild( (par)?((CTreeNode*)par):m_objects_node, 
  204. (*obj)?((*obj)->GetName()):("Object") );
  205. if (res)
  206. {
  207. res->userData = new CObjectNodeData(obj);
  208. res->bAutoDeleteUserData = true;
  209. res->bEditable = true;
  210. SetIconsToNode(res);
  211. }
  212. if (m_wnd && m_wnd->IsWindowVisible())
  213. m_wnd->Invalidate();
  214. return res;
  215. }
  216. bool  CGlobalTree::ShowNode(sgCObject* obj)
  217. {
  218. if (!obj)
  219. return false;
  220. if (sgGetFromObjectTreeNodeHandle(obj)==NULL)
  221. return false;
  222. const sgCObject* obPar = obj->GetParent();
  223. HTREENODE curCh = NULL;
  224. HTREENODE parHn = NULL;
  225. if (obPar)
  226. {
  227. parHn = (HTREENODE)sgGetFromObjectTreeNodeHandle(const_cast<sgCObject*>(obPar));
  228. if (!parHn)
  229. return false;
  230. curCh = parHn->pFirstChild;
  231. }
  232. else
  233. {
  234. parHn = m_objects_node;
  235. curCh = m_objects_node->pFirstChild;
  236. }
  237. while (curCh)
  238. {
  239. if (curCh->userData==NULL)
  240. {
  241. ASSERT(0);
  242. return false;
  243. }
  244. CNodeData* nD = static_cast<CNodeData*>(curCh->userData);
  245. if (nD->m_type!=NDT_OBJECT)
  246. {
  247. ASSERT(0);
  248. return false;
  249. }
  250. CObjectNodeData* onD = reinterpret_cast<CObjectNodeData*>(nD);
  251. sgCObject* obb = *(onD->m_object);
  252. if (obb==obj)
  253. {
  254. curCh->bVisible = true;
  255. sgSetToObjectTreeNodeHandle(obj,curCh);
  256. if (m_wnd && m_wnd->IsWindowVisible())
  257. m_wnd->Invalidate();
  258. return true;
  259. }
  260. curCh = curCh->pNextSibling;
  261. }
  262. return false;
  263. }
  264. bool  CGlobalTree::HideNode(TREENODEHANDLE nd)
  265. {
  266. ((CTreeNode*)nd)->bVisible =false;
  267. if (Drawer::CurrentEditableObject!=NULL)
  268. {
  269. if (((CTreeNode*)nd)->userData==NULL)
  270. {
  271. ASSERT(0);
  272. return false;
  273. }
  274. CNodeData* nD = static_cast<CNodeData*>(((CTreeNode*)nd)->userData);
  275. if (nD->m_type!=NDT_OBJECT)
  276. {
  277. ASSERT(0);
  278. return false;
  279. }
  280. CObjectNodeData* onD = reinterpret_cast<CObjectNodeData*>(nD);
  281. sgCObject* obb = *(onD->m_object);
  282. if (obb==Drawer::CurrentEditableObject)
  283. {
  284. m_editing_regime = true;
  285. m_editing_object_node = (CTreeNode*)nd;
  286. }
  287. }
  288. if (m_wnd && m_wnd->IsWindowVisible())
  289. m_wnd->Invalidate();
  290. return true;
  291. }
  292. bool  CGlobalTree::UpdateNode(ISceneTreeControl::TREENODEHANDLE nd)
  293. {
  294. if (((CTreeNode*)nd)->userData==NULL)
  295. {
  296. ASSERT(0);
  297. return false;
  298. }
  299. CNodeData* nD = static_cast<CNodeData*>(((CTreeNode*)nd)->userData);
  300. if (nD->m_type!=NDT_OBJECT)
  301. {
  302. ASSERT(0);
  303. return false;
  304. }
  305. CObjectNodeData* onD = reinterpret_cast<CObjectNodeData*>(nD);
  306. sgCObject* obb = *(onD->m_object);
  307. ((CTreeNode*)nd)->csLabel = obb->GetName();
  308. if (((CTreeNode*)nd)->item_bitmaps.size()==0)
  309. {
  310. SetIconsToNode((CTreeNode*)nd);
  311. }
  312. if (m_wnd && m_wnd->IsWindowVisible())
  313. m_wnd->Invalidate();
  314. return true;
  315. }
  316. bool  CGlobalTree::RemoveNode(ISceneTreeControl::TREENODEHANDLE nd)
  317. {
  318. if (((CTreeNode*)nd)->userData==NULL)
  319. {
  320. ASSERT(0);
  321. return false;
  322. }
  323. CNodeData* nD = static_cast<CNodeData*>(((CTreeNode*)nd)->userData);
  324. if (nD->m_type!=NDT_OBJECT)
  325. {
  326. ASSERT(0);
  327. return false;
  328. }
  329. CObjectNodeData* onD = reinterpret_cast<CObjectNodeData*>(nD);
  330. sgCObject* obb = *(onD->m_object);
  331. DeleteNode((CTreeNode*)nd);
  332. sgSetToObjectTreeNodeHandle(obb,NULL);
  333. if (m_wnd && m_wnd->IsWindowVisible())
  334. m_wnd->Invalidate();
  335. return true;
  336. }
  337. bool CGlobalTree::ClearTree()
  338. {
  339. DeleteSubTree(m_objects_node);
  340. if (m_wnd && m_wnd->IsWindowVisible())
  341. m_wnd->Invalidate();
  342. return true;
  343. }
  344. void  CGlobalTree::SetCurrentWorkPlane(size_t nmbr)
  345. {
  346. if (nmbr>2)
  347. return;
  348. for (size_t i=0;i<m_wp_nodes.size();i++)
  349. if (i==nmbr)
  350. m_wp_nodes[i]->item_bitmaps[0] = m_radio_check_bmp;
  351. else
  352. m_wp_nodes[i]->item_bitmaps[0] = m_radio_uncheck_bmp;
  353. switch(nmbr) 
  354. {
  355. case 0:
  356. global_opengl_view->GetWorkPlanes()->EnableXWorkPlane(FALSE);
  357. global_opengl_view->GetWorkPlanes()->EnableYWorkPlane(FALSE);
  358. global_opengl_view->GetWorkPlanes()->EnableZWorkPlane(TRUE);
  359. m_wp_nodes[0]->item_bitmaps[1] = m_vis_obj_bitmap;
  360. global_opengl_view->GetWorkPlanes()->SetXWorkPlaneVisibles(FALSE);
  361. global_opengl_view->GetWorkPlanes()->SetYWorkPlaneVisibles(FALSE);
  362. global_opengl_view->GetWorkPlanes()->SetZWorkPlaneVisibles(TRUE);
  363. m_wp_nodes[1]->item_bitmaps[1] = m_invis_obj_bitmap;
  364. m_wp_nodes[2]->item_bitmaps[1] = m_invis_obj_bitmap;
  365. break;
  366. case 1:
  367. global_opengl_view->GetWorkPlanes()->EnableXWorkPlane(FALSE);
  368. global_opengl_view->GetWorkPlanes()->EnableYWorkPlane(TRUE);
  369. global_opengl_view->GetWorkPlanes()->EnableZWorkPlane(FALSE);
  370. m_wp_nodes[1]->item_bitmaps[1] = m_vis_obj_bitmap;
  371. global_opengl_view->GetWorkPlanes()->SetXWorkPlaneVisibles(FALSE);
  372. global_opengl_view->GetWorkPlanes()->SetYWorkPlaneVisibles(TRUE);
  373. global_opengl_view->GetWorkPlanes()->SetZWorkPlaneVisibles(FALSE);
  374. m_wp_nodes[0]->item_bitmaps[1] = m_invis_obj_bitmap;
  375. m_wp_nodes[2]->item_bitmaps[1] = m_invis_obj_bitmap;
  376. break;
  377. case 2:
  378. global_opengl_view->GetWorkPlanes()->EnableXWorkPlane(TRUE);
  379. global_opengl_view->GetWorkPlanes()->EnableYWorkPlane(FALSE);
  380. global_opengl_view->GetWorkPlanes()->EnableZWorkPlane(FALSE);
  381. m_wp_nodes[2]->item_bitmaps[1] = m_vis_obj_bitmap;
  382. global_opengl_view->GetWorkPlanes()->SetXWorkPlaneVisibles(TRUE);
  383. global_opengl_view->GetWorkPlanes()->SetYWorkPlaneVisibles(FALSE);
  384. global_opengl_view->GetWorkPlanes()->SetZWorkPlaneVisibles(FALSE);
  385. m_wp_nodes[0]->item_bitmaps[1] = m_invis_obj_bitmap;
  386. m_wp_nodes[1]->item_bitmaps[1] = m_invis_obj_bitmap;
  387. break;
  388. default:
  389. ASSERT(0);
  390. }
  391. global_opengl_view->Invalidate();
  392. m_wnd->Invalidate(FALSE);
  393. }
  394. void   CGlobalTree::ChangeWorkPlaneVisible(size_t nmbr)
  395. {
  396. if (nmbr>2)
  397. return;
  398. switch(nmbr) 
  399. {
  400. case 0:
  401. if (!global_opengl_view->GetWorkPlanes()->IsZWorkPlaneEnable())
  402. return;
  403. if (global_opengl_view->GetWorkPlanes()->IsZWorkPlaneVisible())
  404. {
  405. m_wp_nodes[nmbr]->item_bitmaps[1] = m_invis_obj_bitmap;
  406. global_opengl_view->GetWorkPlanes()->SetZWorkPlaneVisibles(FALSE);
  407. }
  408. else
  409. {
  410. m_wp_nodes[nmbr]->item_bitmaps[1] = m_vis_obj_bitmap;
  411. global_opengl_view->GetWorkPlanes()->SetXWorkPlaneVisibles(FALSE);
  412. global_opengl_view->GetWorkPlanes()->SetYWorkPlaneVisibles(FALSE);
  413. global_opengl_view->GetWorkPlanes()->SetZWorkPlaneVisibles(TRUE);
  414. m_wp_nodes[1]->item_bitmaps[1] = m_invis_obj_bitmap;
  415. m_wp_nodes[2]->item_bitmaps[1] = m_invis_obj_bitmap;
  416. }
  417. break;
  418. case 1:
  419. if (!global_opengl_view->GetWorkPlanes()->IsYWorkPlaneEnable())
  420. return;
  421. if (global_opengl_view->GetWorkPlanes()->IsYWorkPlaneVisible())
  422. {
  423. m_wp_nodes[nmbr]->item_bitmaps[1] = m_invis_obj_bitmap;
  424. global_opengl_view->GetWorkPlanes()->SetYWorkPlaneVisibles(FALSE);
  425. }
  426. else
  427. {
  428. m_wp_nodes[nmbr]->item_bitmaps[1] = m_vis_obj_bitmap;
  429. global_opengl_view->GetWorkPlanes()->SetXWorkPlaneVisibles(FALSE);
  430. global_opengl_view->GetWorkPlanes()->SetYWorkPlaneVisibles(TRUE);
  431. global_opengl_view->GetWorkPlanes()->SetZWorkPlaneVisibles(FALSE);
  432. m_wp_nodes[0]->item_bitmaps[1] = m_invis_obj_bitmap;
  433. m_wp_nodes[2]->item_bitmaps[1] = m_invis_obj_bitmap;
  434. }
  435. break;
  436. case 2:
  437. if (!global_opengl_view->GetWorkPlanes()->IsXWorkPlaneEnable())
  438. return;
  439. if (global_opengl_view->GetWorkPlanes()->IsXWorkPlaneVisible())
  440. {
  441. m_wp_nodes[nmbr]->item_bitmaps[1] = m_invis_obj_bitmap;
  442. global_opengl_view->GetWorkPlanes()->SetXWorkPlaneVisibles(FALSE);
  443. }
  444. else
  445. {
  446. m_wp_nodes[nmbr]->item_bitmaps[1] = m_vis_obj_bitmap;
  447. global_opengl_view->GetWorkPlanes()->SetXWorkPlaneVisibles(TRUE);
  448. global_opengl_view->GetWorkPlanes()->SetYWorkPlaneVisibles(FALSE);
  449. global_opengl_view->GetWorkPlanes()->SetZWorkPlaneVisibles(FALSE);
  450. m_wp_nodes[1]->item_bitmaps[1] = m_invis_obj_bitmap;
  451. m_wp_nodes[0]->item_bitmaps[1] = m_invis_obj_bitmap;
  452. }
  453. break;
  454. default:
  455. ASSERT(0);
  456. }
  457. global_opengl_view->Invalidate();
  458. m_wnd->Invalidate(FALSE);
  459. }
  460. void   CGlobalTree::ChangeObjectVisible(sgCObject* ob,bool vis)
  461. {
  462. if (vis)
  463. ((HTREENODE)sgGetFromObjectTreeNodeHandle(ob))->item_bitmaps[1]=m_vis_obj_bitmap;
  464. else
  465. ((HTREENODE)sgGetFromObjectTreeNodeHandle(ob))->item_bitmaps[1]=m_invis_obj_bitmap;
  466. m_wnd->Invalidate(FALSE);
  467. }
  468. void  CMyBirchCtrl::StartEditLabel(HTREENODE pNode, CString& newLabel)
  469. {
  470. if (pNode->userData==NULL)
  471. {
  472. return;
  473. }
  474. CNodeData* nD = static_cast<CNodeData*>(pNode->userData);
  475. if (nD->m_type!=NDT_OBJECT)
  476. {
  477. return;
  478. }
  479. CObjectNodeData* onD = reinterpret_cast<CObjectNodeData*>(nD);
  480. sgCObject* obb = *(onD->m_object);
  481. newLabel = obb->GetName();
  482. }
  483. void  CMyBirchCtrl::FinishEditLabel(HTREENODE pNode, CString& newLabel)
  484. {
  485. if (pNode->userData==NULL)
  486. {
  487. return;
  488. }
  489. CNodeData* nD = static_cast<CNodeData*>(pNode->userData);
  490. if (nD->m_type!=NDT_OBJECT)
  491. {
  492. return;
  493. }
  494. CObjectNodeData* onD = reinterpret_cast<CObjectNodeData*>(nD);
  495. sgCObject* obb = *(onD->m_object);
  496. obb->SetName(newLabel);
  497. pNode->csLabel = obb->GetName();
  498. }
  499. void  CMyBirchCtrl::ClickOnIcon(HTREENODE pNode, unsigned int iconNumb)
  500. {
  501. if (pNode->userData==NULL)
  502. return;
  503. CNodeData* nD = static_cast<CNodeData*>(pNode->userData);
  504. if (nD->m_type==NDT_WORK_PLANE)
  505. {
  506. CWorkPlaneNodeData* wpnD = reinterpret_cast<CWorkPlaneNodeData*>(nD);
  507. if (iconNumb==0)
  508. theApp.m_main_tree_control->SetCurrentWorkPlane(wpnD->m_wp_number);
  509. if (iconNumb==1)
  510. theApp.m_main_tree_control->ChangeWorkPlaneVisible(wpnD->m_wp_number);
  511. }
  512. if (nD->m_type==NDT_OBJECT && iconNumb==1)
  513. {
  514. CObjectNodeData* onD = reinterpret_cast<CObjectNodeData*>(nD);
  515. sgCObject* obb = *(onD->m_object);
  516. if (obb->GetAttribute(SG_OA_DRAW_STATE)&SG_DS_HIDE)
  517. {
  518. obb->SetAttribute(SG_OA_DRAW_STATE,obb->GetAttribute(SG_OA_DRAW_STATE)& ~SG_DS_HIDE);
  519. theApp.m_main_tree_control->ChangeObjectVisible(obb,true);
  520. }
  521. else
  522. {
  523.     obb->SetAttribute(SG_OA_DRAW_STATE,obb->GetAttribute(SG_OA_DRAW_STATE)|SG_DS_HIDE);
  524. theApp.m_main_tree_control->ChangeObjectVisible(obb,false);
  525. }
  526. global_opengl_view->Invalidate();
  527. }
  528. }
  529. // CSceneTreeDlg dialog
  530. IMPLEMENT_DYNAMIC(CSceneTreeDlg, CDialog)
  531. CSceneTreeDlg::CSceneTreeDlg(CWnd* pParent /*=NULL*/)
  532. : CDialog(CSceneTreeDlg::IDD, pParent)
  533. {
  534. }
  535. CSceneTreeDlg::~CSceneTreeDlg()
  536. {
  537. }
  538. void CSceneTreeDlg::DoDataExchange(CDataExchange* pDX)
  539. {
  540. CDialog::DoDataExchange(pDX);
  541. }
  542. BEGIN_MESSAGE_MAP(CSceneTreeDlg, CDialog)
  543. ON_WM_SIZE()
  544. END_MESSAGE_MAP()
  545. // CSceneTreeDlg message handlers
  546. void CSceneTreeDlg::OnOK()
  547. {
  548. }
  549. void CSceneTreeDlg::OnCancel()
  550. {
  551. }
  552. BOOL CSceneTreeDlg::OnInitDialog()
  553. {
  554. CDialog::OnInitDialog();
  555. CRect clR;
  556. GetWindowRect(clR);
  557. m_tree.CreateEx(WS_EX_CLIENTEDGE,NULL,NULL,WS_CHILD|WS_VISIBLE,clR,this,1001);
  558. m_tree.SetBirch(theApp.m_main_tree_control);
  559. if (theApp.m_main_tree_control)
  560. theApp.m_main_tree_control->SetWnd(&m_tree);
  561. m_tree
  562. .SetTextFont( 8, FALSE, FALSE, "MS Shell Dlg" )
  563. .SetDefaultTextColor( RGB(0,64,128) );
  564. // Tree data
  565. //m_ST_Tree.SetLineHeight(30);
  566. return TRUE;  // return TRUE unless you set the focus to a control
  567. // EXCEPTION: OCX Property Pages should return FALSE
  568. }
  569. void CSceneTreeDlg::OnSize(UINT nType, int cx, int cy)
  570. {
  571. CDialog::OnSize(nType, cx, cy);
  572. if (::IsWindow(m_tree.m_hWnd))
  573. {
  574. m_tree.MoveWindow(0,0,cx,cy);
  575. }
  576. }